Register

OR

Do you already have an account? Login

Login

OR

Don't you have an account yet? Register

Newsletter

Submit to our newsletter to receive exclusive stories delivered to you inbox!

Задание: Нужно написать рекурсию алгоритмов на языке Паскаль. Нахождение n-го члена ряда Фибоначчи. Буду благодарна)

более месяца назад
Просмотров : 12    Ответов : 1   

Лучший ответ:

Числа Фибоначчи определяются следующим образом:
F_0=1;  F_1=1;  F_n=F_{n-1} F_{n-2},  ngeqslant2,  nin mathbb Z
Для перехода от математической записи к записи, пригодной для алгоритмизации (и программирования), нужно представить число Фибоначчи в виде некоей функции F(n) и уже эту функцию программировать. Такое представление получить в данном случае очень просто.
F(n)=left{begin{matrix} 1 & & n=0,1 \ F(n-1) F(n-2) & & ngeqslant2,  nin mathbb Z end{matrix}right.

Поскольку в функции присутствует определение её значения через обращение к ней же, мы можем говорить о рекурсивном определении функции.
Рекурсия программируется либо непосредственно (это быстро, наглядно, но часто сопряжено с большими расходами вычислительных ресурсов), либо путем сведения к итерации (это существенно менее наглядно, может быть затруднено алгоритмически, но эффективно при выполнении). Поскольку в задании говорится о рекурсии, выбираем рекурсивный алгоритм.

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.

Как хорошо видно, по мере деградации уровня программирования программа становится длиннее, но ни в коем случае ни яснее, ни эффективнее.




более месяца назад
Ваш ответ:
Комментарий должен быть минимум 20 символов
Чтобы получить баллы за ответ войди на сайт





Вы можете из нескольких рисунков создать анимацию (или целый мультфильм!). Для этого нарисуйте несколько последовательных кадров и нажмите кнопку Просмотр анимации.


Другие вопросы: