Хорошо, я предисловил, что рекурсивная функция не является эффективным методом для вычисления Фибоначчи, и ее можно использовать только для обучения / демонстрации разработчиков, поскольку каждая рекурсия хранится в стеке и может также переполняться для больших чисел Фибоначчи.
Это скорее стоит усилий, чтобы записать более эффективную функцию Фибоначчи, которая использует цикл, как следующий код:
#include <stdio.h>
#define MAX_ITERS 20
int fibonacci(int);
int main(int argc, char *argv[])
{
unsigned int iters;
if(argc>1) {
iters=atoi(argv[1]);
} else
iters=MAX_ITERS;
fibonacci(iters);
return 0;
}
int fibonacci(int iterations)
{
unsigned register int i;
double first=0.0, second = 1.0, lastsum;
printf("First %d iterations of Fibonacci series are :\n",iterations);
for ( i = 0 ; i < iterations ; i++ )
{
if ( i <= 1 )
lastsum = (double)i;
else
{
lastsum = first + second;
first = second;
second = lastsum;
}
printf("%.0f\n",lastsum);
}
}
Попробуйте самостоятельно сравнить, запустив . / Fibonacci 50 с этим методом, например на недорогом процессоре (например, на Raspberry PI), и на рекурсивном Функции и 50 первых чисел, а также увидеть разницу! , -)