Приветствую, возможно, кто -то уже реализовывал расчет чисел фибоначчи, но мне необходима обратная операция по вычислению N-го число последовательности, имея на руках число фибоначчи, при этом код должен быть максимально быстрым (возможно использования массива с предыдущими расчетами). Например, имеем последовательность 01123581321345589144233377610, вычисления показывают N=15.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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 ;
|