1) Решение с помощью рекурсии.Программа проста в понимании, но неэффективна при больших значенияхfunction f(i: integer): longint;begin if i < 2 then f := 1 else f := f(i - 1) + f(i - 2);end;begin writeln('f(10) = ', f(10)); writeln('f(25) = ', f(25)); writeln('f(40) = ', f(40));end.
2) Решение с помощью динамического программирования. Вычисляет намного быстрее, чем решение с рекурсией.var i: integer; f: array[0..40] of longint;begin f[0] := 1; f[1] := 1; for i := 2 to 40 do f[i] := f[i - 1] + f[i - 2]; writeln('f(10) = ', f[10]); writeln('f(25) = ', f[25]); writeln('f(40) = ', f[40]);end.
3) Решение с помощью моделирования. Использует меньше памяти.function f(i: integer): longint;var a, b: longint; j: integer;begin if i < 2 then f := 1 else begin a := 0; b := 1; for j := 0 to i do begin b := a + b; a := b - a; end; f := a; end;end;begin writeln('f(10) = ', f(10)); writeln('f(25) = ', f(25)); writeln('f(40) = ', f(40));end.