Посчитать количество рекурсий в программе - C (СИ)
Формулировка задачи:
Всем привет, помогите посчитать количество рекурсий в программе.
#include <stdio.h>
#include <locale.h>
#include <ctime>
unsigned long long Fib(unsigned long long N)
{
if (N<=1)
return (N);
else
return Fib(N-1)+Fib(N-2);
}
int main ()
{
setlocale(LC_ALL, "Rus");
unsigned long long N;
printf ("Введите число N");
scanf("%d",&N);
for(int i;i<=N;i++)
printf ("%d\n",Fib(i));
printf("runtime=%d\n",clock()/1000);
}Решение задачи: «Посчитать количество рекурсий в программе»
textual
Листинг программы
unsigned count = 0;
unsigned long long Fib(unsigned long long N)
{
if(N <= 1) return N;
else{
++count;
return Fib(N-1)+Fib(N-2);
}
}
int main(void)
{
printf("Fib: %d\n", Fib(21));
printf("Count Fib: %d\n", count);
return 0;
}
Объяснение кода листинга программы
- Объявлена переменная
countтипаunsignedдля подсчета количества рекурсий. - Объявлена функция
Fibтипаunsigned long long, которая принимает целочисленный аргументN. - В функции
Fibпроверка: еслиNменьше или равно 1, то возвращаетсяN(базовый случай). - В функции
Fibесли базовый случай не наступил, то происходит инкремент переменнойcountи вызывается рекурсивный вызов функцииFibс аргументамиN-1иN-2. - В функции
Fibвозвращается сумма результатов рекурсивных вызовов функцииFibс аргументамиN-1иN-2. - В функции
mainвызывается функцияFibс аргументом21. - В функции
mainвыводится значение переменнойcount, которая содержит количество рекурсий. - В функции
mainвыводится значение функцииFibс аргументом21. - В функции
mainвозвращается 0, что означает успешный конец работы программы.