Написать программку на паскале. Помогите написать. Числа Фибоначчи (fn) определяются
Написать программку на паскале. Помогите написать.
Числа Фибоначчи (fn) определяются формулами:
f0=f1=1, fn=fn-1+fn-2 при n=2,3,
Найти f10, f25, f40.
1 ответ
Ирина
1) Решение с помощью рекурсии.
Программка ординарна в осознании, но неэффективна при больших значениях
function f(i: integer): longint;
begin
if i lt; 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 lt; 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.
Программка ординарна в осознании, но неэффективна при больших значениях
function f(i: integer): longint;
begin
if i lt; 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 lt; 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.
, оставишь ответ?
Похожие вопросы
-
Вопросы ответы
Новое
NEW
Статьи
Информатика
Статьи
Последние вопросы
Здравствуйте
Меня зовут Виталий, я AdOps-аналитик компании Adfinity.pro
Заинтересовал ваш проект obrazovalka.com
Думаю сможем увеличить
Разные вопросы.
мне очень срочно нужно сочинение по рассказу экспонат номер по дной
Литература.
мне очень срочно нужно сочинение по рассказу экспонат номер по дной
Литература.
В семье из трех человек три электронных устройства: ноутбук, планшет и
Разные вопросы.
Жаркыраган кашка маш жаралгандан ашка маш табышмак жообу менен
Кыргыз тили.
За лето подруги прочитали 48 книг.Причем Оля прочитала в 3 раза
Математика.
Периметр равнобедренного треугольника ABC (AB=BC) равен 34 см. Периметр треугольника ABM,
Разные вопросы.
«Металлическая болванка, нагрета до 420C, охлаждается в воздухе, температура которого 20C,
Алгебра.
xdy=(x+y)dx, y(1) = 0. по условию Коши помогите решить
Алгебра.
помогите пожалуйста. надо записать уравнения диссоциации следующих электролитов: карбонат натрия; бромиб
Химия.
Облако тегов