|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Находим N’е число Фибоначчи
Приветствую, возможно, кто -то уже реализовывал расчет чисел фибоначчи, но мне необходима обратная операция по вычислению N-го число последовательности, имея на руках число фибоначчи, при этом код должен быть максимально быстрым (возможно использования массива с предыдущими расчетами). Например, имеем последовательность 01123581321345589144233377610, вычисления показывают N=15.
Код:
function Fibonacci(aNumber: Integer): ; if aNumber < 0 then raise Exception.Create('The Fibonacci sequence is not defined for negative integers.'); case 0: Result:= 0;; 1: Result:= 1; Result:= Fibonacci(aNumber - 1) + Fibonacci(aNumber - 2); end;; end; function Fibonacci(aNumber: Integer): ; var I, N_1, N_2, N: Integer; if aNumber < 0 then raise Exception.Create('The Fibonacci sequence is not defined for negative integers.'); case 0: Result:= 0; 1: Result:= 1; else begin N_1:= 0; N_2:= 1; for I:=2 to aNumber do beginn N:= N_1 + N_2; N_1:= N_2; N_2:= N; end; Result:= N; end; end; end; Последний раз редактировалось Vayrus, 31.05.2019 в 12:29. |
#2
|
|||
|
|||
Код писать лень.
Не самый быстрый из возможных алгоритмов - цикл с памятью. Т.е. сам принцип нахождения N все тот же - расчет и сравнение. При расчете надо заполнять массив для убыстрения дальнейших итераций. Ну и начало поиска - от последнего элемента массива. Т.е. если введенное число больше, чем последнее расчитанное, то считаем с последнего пока не попадем (ну или превысим N, тогда введенное число не является числом фибоначчи). Если меньше - то просто проверяем по массиву. |
#3
|
||||
|
||||
В яндекс собеседуешься?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
Да
неет |