Прошу помочь с решением задачки - число Фибоначчи и интерактивная часть
Всем доброго дня.
Написал вот такой несложный пример:
alert ('Форма вычисления числа Фибоначчи по порядковому номеру')
let numberFib = prompt('Введите порядковый номер числа Фибоначчи')
if (numberFib == NaN || numberFib == null) {
alert('Введено некорректное значение')
} else {
function fibonachy(numberFib) {
if (numberFib == NaN || numberFib == null) {
result = ('Введено некорректное значение')
}
if (numberFib <= 0) {
result = "incorrect number"
}
if (numberFib == 1) {
result = 0
}
if (numberFib == 2) {
result = 1
}
if (numberFib == 3) {
result = 2
}
if (numberFib > 3) {
result = fibonachy(numberFib-1) + fibonachy(numberFib-2)
return result;
}
}
alert('Число Фибоначчи с порядковым номером ' + numberFib + ' равно ' + fibonachy(numberFib))
}
Хочу чтобы при вводе нечисла или вводе пустого поля программа показывала сообщение об ошибке и останавливалась. Не могу понять ЧЯДНТ, прошу помочь))) |
число Фибоначчи
Roman_,
function fibonachy(numberFib) {
if (numberFib == 1) {
result = 2
}
if (numberFib == 2) {
result = 3
}
if (numberFib == 3) {
result = 5
}
if (numberFib > 3) {
result = fibonachy(numberFib - 1) + fibonachy(numberFib - 2)
}
return result;
}
alert('Форма вычисления числа Фибоначчи по порядковому номеру');
let numberFib = prompt('Введите порядковый номер числа Фибоначчи');
if (isNaN(+numberFib) || numberFib === null || +numberFib <= 0) {
alert('Введено некорректное значение')
} else {
alert('Число Фибоначчи с порядковым номером ' + numberFib + ' равно ' + fibonachy(+numberFib))
}
|
Предложу функцию покороче...
function fibonachy(numberFib) {
if (numberFib > 3) {
result = fibonachy(numberFib - 1) + fibonachy(numberFib - 2)
} else {
let a = [2, 3, 5]
result = a[numberFib - 1]
}
return result;
}
|
Предложу функцию пошустрее
для больших чисел, в том числе отрицательных :)
function fib(n) {
let k = BigInt(n < 0 ? Math.pow(-1, n + 1) : 1);
n = BigInt(Math.abs(n));
const calculate = n => {
if (n === 0n) {
return [0n, 1n];
}
const [a, b] = calculate(n / 2n);
const c = a * (2n * b - a);
const d = (a * a + b * b);
return n % 2n === 0n ? [c, d] : [d, c + d];
}
const res = calculate(n);
return res[0] * k;
}
|
:)
|
Цитата:
Спасибо, добрый человек)) Пошел читать про isNaN() |
Цитата:
Насколько я понимаю сначала присвоили переменной k какое то условное числовое значение, далее идет часть BigInt - n, здесь n равно какому то выражению с n и далее я совершенно не понимаю(( Если не будет времени/желания - хотя бы направьте где почитать/посмотреть. |
Roman_,
Искать по словесам "fast doubling" |
| Часовой пояс GMT +3, время: 23:32. |