Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/47: Рейтинг темы: голосов - 47, средняя оценка - 4.70
0 / 0 / 1
Регистрация: 13.01.2017
Сообщений: 31
1

Напишите рекурсивную и нерекурсивную функции, вычисляющие n-e число Фибоначчи

22.03.2017, 10:17. Показов 9048. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Числа Фибоначчи задаются следующими соотношениями: f0=f1=1; fn=fn-1+fn-2, n>1. Напишите рекурсивную и нерекурсивную функции, вычисляющие n-e число Фибоначчи, и сравните скорость их работы. Объясните результаты сравнения.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2017, 10:17
Ответы с готовыми решениями:

Описать нерекурсивную функцию, вычисляющую N-e число Фибоначчи
Описать нерекурсивную функцию Fib(N) целого типа , вычисляющую N-e число Фибоначчи F(N) по формуле:...

Написать рекурсивную и нерекурсивную программу вычисления значения функции f
Написать рекурсивную и нерекурсивную программу вычисления значения функции f, полученной оператором...

Описать рекурсивную и нерекурсивную функции вычисления значения по формуле
Рекурсия: Описать рекурсивную и нерекурсивную функции вычисления значения по формуле:...

Написать рекурсивную и нерекурсивную функции вычисления полинома (ошибка в цикле)
Здравствуйте,Помогите найти ошибку в цикле. Задание: Написать рекурсивную и не рекурсивную...

2
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
22.03.2017, 10:36 2
Лучший ответ Сообщение было отмечено Pudge1488 как решение

Решение

С рекурсией
Pascal
1
2
3
4
function fib(i:integer):integer;
begin
  if i>2 then fib:=fib(i-1)+fib(i-2) else fib:=1;
end;
Без рекурсии
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function fib(i:integer):integer;
var j,f1,f2,f:integer;
begin
  f1:=1; f2:=1;
  if i<=2 then fib:=1 else begin
    for j:=3 to i do begin
      f:=f1+f2;
      f2:=f1; f1:=f;
    end;
  fib:=f;
  end;
end;
1
Модератор
9870 / 5238 / 3306
Регистрация: 17.08.2012
Сообщений: 16,006
24.03.2017, 18:38 3
Hitoku, Вторая программа содержит ошибку. Не инициализирована локальная переменная f. Замечу ещё, что алгоритм не оптимален. Можно так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function fib(i: longword): longword;
var g, f: longword;
begin
  g := 1;
  f := 1;
  for i := 3 to i do
    begin
      f := f + g;
      g := f - g
    end;
  fib := f
end;
Можно использовать встроенную переменную Result, если она поддерживается компилятором:
Pascal
1
2
3
4
5
6
7
8
9
10
11
function fib(i: longword): longword;
var g: longword;
begin
  g := 1;
  Result := 1;
  for i := 3 to i do
    begin
      Result := Result + g;
      g := Result - g
    end
end;
или, если Result нетути, то "с хаком", если компилятор позволит (фактически, моделирование с помощью absolute встроенной переменной Result):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function fib(i: longword): longword;
var g: longword;
    f: longword absolute fib;
begin
  g := 1;
  f := 1;
  for i := 3 to i do
    begin
      f := f + g;
      g := f - g
    end
end;
И здесь рекурсивная функция проигрывает по времени в любом случае. И в моих, и в исправленном Вашем.

Можно ещё через формулу Бине:
Pascal
1
2
3
4
5
6
function fib(i: longword): longword;
const ln_fi = ln((1 + sqrt(5)) / 2);
      sqrt5 = sqrt(5);
begin
  fib := round(exp(i * ln_fi) / sqrt5)
end;
Здесь рекурсия выигрывает при малых i, но совсем безнадёжно проигрывает при больших i.
1
24.03.2017, 18:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2017, 18:38
Помогаю со студенческими работами здесь

Описать нерекурсивную функцию целого типа, вычисляющую N-e число Фибоначчи по формуле
Описать нерекурсивную функцию Fib(N) целого типа , вычисляющую N-e число Фибоначчи F(N) по...

Напишите рекурсивную и не рекурсивную функции, реализующие алгоритм решения поставленной задачи
Программисты, нужна помощь для решения этой задачи. &quot;Вычисление n-го члена арифметической...

Напишите функции, вычисляющие температуру Фаренгейта по заданной температуре Цельсия и наоборот
Напишите функции, вычисляющие температуру Фаренгейта по заданной температуре Цельсия и наоборот...

Напишите функции, вычисляющие первую и вторую цифры заданного двузначного числа
Напишите функции, вычисляющие первую и вторую цифры заданного двузначного числа. Создайте форму с...

Переделать нерекурсивную функцию в рекурсивную
Написала функцию, которая после каждого символа введённой строки должна вставлять символ &quot;*&quot;. ...

Составить рекурсивную и нерекурсивную функцию
Найти сумму: 1^2+3^2+5^2+7^2... (n слагаемых). Буду очень признательна.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru