Recur5. Описать рекурсивную функцию Fib2($$N$$) целого типа, вычисляющую $$N$$-й элемент последовательности чисел Фибоначчи ($$N$$ — целое число): $$F_1=F_2=1$$,$$F_K=F_{K-2}+F_{K-1}$$, $$K=3, 4,…$$. Считать, что номер $$N$$ не превосходит $$20$$. Для уменьшения количества рекурсивных вызовов по сравнению с функцией Fib1 (см. задание Recur4) создать вспомогательный массив для хранения уже вычисленных чисел Фибоначчи и обращаться к нему при выполнении функции Fib2. С помощью функции Fib2 найти пять чисел Фибоначчи с данными номерами.
Решение:
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 |
program Recur5; var Memory:array[1..20] of integer; N,i:integer; Function Fib2(N:integer):integer; Var Fib22,Fib21:integer; begin if N>2 then begin if Memory[N-2]>0 then Fib22:=Memory[N-2] else Fib22:=Fib2(N-2); if Memory[N-1]>0 then Fib21:=Memory[N-1] else Fib21:=Fib2(N-1); if N>2 then Result:=Fib22+Fib21 else Fib2:=1; end else result:=1; Memory[N]:=Result; end; begin for i:=1 to 20 do Memory[i]:=0; for i:=1 to 5 do begin Write('N: '); Readln(N); Writeln(Fib2(N)); end; end. |
Другие задачи из раздела Recur можно посмотреть здесь.
Комментарии: