Используйте двойной тип, потому что тип int будет быстро переполняться при вычислении скромно больших чисел Фибоначчи.Большие числа должны использовать экспоненциальную запись, найденную в двойной плавающей запятой.
Поскольку вы используете предыдущие числа, сдвинутые на единицу для каждой следующей итерации цикла, для рекурсивного вызова имеет смысл использовать фибоначчи (a, a + b, n + 1, количество) вместо фибоначчи (b, a + b, n + 1, количество).Я написал свою собственную рекурсивную функцию, которая является менее рекурсивной, чтобы проиллюстрировать, почему использовать другой рекурсивный вызов, чтобы сделать логику более понятной.
Рекурсивная функция, которую я написал, показывает, как быстро числа с плавающей точкой переполняются числами Фибоначчи.
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
int fibonacci(double n, int count) {
char ch;
static double lastnminus1, lastnminus2;
if (n == 1) {
lastnminus1 = 1;
lastnminus2 = 0;
}
cout << lastnminus1 + lastnminus2 << endl;
double temp = lastnminus1;
lastnminus1 = lastnminus1 + lastnminus2;
lastnminus2 = temp;
if (static_cast<int>(n) % 24 == 0) {
cout << "press a key" << endl;
ch = getch();
}
if ( n < count)
fibonacci(n+1,count);
return 0;
}
int main()
{
fibonacci(1,200);
return 0;
}