Найти количество сложений для вычисления n-го числа Фибоначчи рекурсивным и обычным алгоритмом. - C (СИ)
Формулировка задачи:
Найти количество сложений для вычисления n-го числа Фибоначчи рекурсивным и обычным алгоритмом.
Результаты выдать в виде таблицы.
Помогите плиз.
обычным могу сделать, а вот как рекурсивным не знаю
Обычный алгоритм:
#include<stdio.h>
#include<math.h>
#define n 11
int main()
{
static int fib[n];
int i,kol=0;
fib[0]=1;
fib[1]=1;
for(i=0;i<n;i++)
{
fib[i+1]=fib[i-1]+fib[i];
if(i+2<n)
{
kol++;
}
}
for(i=0;i<n;i++)
{
printf(" %d",fib[i]);
}
printf("\n");
printf("%d",kol);
}
...
Решение задачи: «Найти количество сложений для вычисления n-го числа Фибоначчи рекурсивным и обычным алгоритмом.»
textual
Листинг программы
#include<stdio.h>
#include<math.h>
//cnt - глобальная переменная!!!
int cnt=0;
int fib(int n)
{
if((n==1)||(n==2))
return 1;
else
{
++cnt;
return fib(n-1)+fib(n-2);
}
}
int main()
{
int n=9;
printf("Fibbonacci number #%d = %d\n", n, fib(n));
printf("Addition count = %d\n", cnt);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и математическими вычислениями.
- Объявление глобальной переменной
cnt, которая будет использоваться для подсчета операций в рекурсивном алгоритме. - Рекурсивная функция
fib(int n), которая вычисляет n-ое число Фибоначчи. - Проверка базового случая: если n равно 1 или 2, функция возвращает 1.
- Увеличение счетчика операций
cntна 1. - Рекурсивный вызов функции
fib(n-1)иfib(n-2)для вычисления n-ого числа Фибоначчи. - В основной функции
main()задается значение переменнойnравное 9. - Вызывается функция
fib(n)для вычисления 9-го числа Фибоначчи и сохранения результата в переменнуюresult. - Выводится на экран значение
resultи количество операцийcnt. - Программа возвращает 0, заканчивая свое выполнение.