Прошу помочь с решением задачки - число Фибоначчи и интерактивная часть
Всем доброго дня.
Написал вот такой несложный пример: 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, время: 11:14. |