Предмет: Информатика,
автор: Annaalisia
Задание: Нужно написать рекурсию алгоритмов на языке Паскаль. Нахождение n-го члена ряда Фибоначчи. Буду благодарна)
Ответы
Автор ответа:
0
Числа Фибоначчи определяются следующим образом:
Для перехода от математической записи к записи, пригодной для алгоритмизации (и программирования), нужно представить число Фибоначчи в виде некоей функции F(n) и уже эту функцию программировать. Такое представление получить в данном случае очень просто.
Поскольку в функции присутствует определение её значения через обращение к ней же, мы можем говорить о рекурсивном определении функции.
Рекурсия программируется либо непосредственно (это быстро, наглядно, но часто сопряжено с большими расходами вычислительных ресурсов), либо путем сведения к итерации (это существенно менее наглядно, может быть затруднено алгоритмически, но эффективно при выполнении). Поскольку в задании говорится о рекурсии, выбираем рекурсивный алгоритм.
1. Очень короткая реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer:=(n<2?1:Fib(n-1)+Fib(n-2));
begin
Writeln(Fib(ReadInteger('n=')))
end.
Тестовое решение
n= 20
10946
2. Более традиционная реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer;
begin
if n<2 then Result:=1
else Result:=Fib(n-1)+Fib(n-2)
end;
begin
Writeln(Fib(ReadInteger('n=')))
end.
3. Тупо-школьная реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer;
begin
if n<2 then Fib:=1
else Fib:=Fib(n-1)+Fib(n-2)
end;
var
n:integer;
begin
Write('n='); Read(n);
Writeln(Fib(n))
end.
Как хорошо видно, по мере деградации уровня программирования программа становится длиннее, но ни в коем случае ни яснее, ни эффективнее.
Для перехода от математической записи к записи, пригодной для алгоритмизации (и программирования), нужно представить число Фибоначчи в виде некоей функции F(n) и уже эту функцию программировать. Такое представление получить в данном случае очень просто.
Поскольку в функции присутствует определение её значения через обращение к ней же, мы можем говорить о рекурсивном определении функции.
Рекурсия программируется либо непосредственно (это быстро, наглядно, но часто сопряжено с большими расходами вычислительных ресурсов), либо путем сведения к итерации (это существенно менее наглядно, может быть затруднено алгоритмически, но эффективно при выполнении). Поскольку в задании говорится о рекурсии, выбираем рекурсивный алгоритм.
1. Очень короткая реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer:=(n<2?1:Fib(n-1)+Fib(n-2));
begin
Writeln(Fib(ReadInteger('n=')))
end.
Тестовое решение
n= 20
10946
2. Более традиционная реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer;
begin
if n<2 then Result:=1
else Result:=Fib(n-1)+Fib(n-2)
end;
begin
Writeln(Fib(ReadInteger('n=')))
end.
3. Тупо-школьная реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer;
begin
if n<2 then Fib:=1
else Fib:=Fib(n-1)+Fib(n-2)
end;
var
n:integer;
begin
Write('n='); Read(n);
Writeln(Fib(n))
end.
Как хорошо видно, по мере деградации уровня программирования программа становится длиннее, но ни в коем случае ни яснее, ни эффективнее.
Похожие вопросы
Предмет: Математика,
автор: innaa1683
Предмет: География,
автор: Аноним
Предмет: Английский язык,
автор: mamynaradost
Предмет: Алгебра,
автор: flume
Предмет: Математика,
автор: 97899yjj