好吧,我一直在寻找一些递归解决方案来完成相同的任务,大多数人所做的是,他们编写一个递归函数来查找第 n 个斐波那契数,然后在主程序中,他们运行一个循环 n 次,并调用这个递归使用值 1 到 n 的函数来获取所有 n 个斐波那契数并打印它们,这是一个很大的开销。
这是一个执行相同任务的解决方案,但它只调用一次递归函数来获取最多 n 个斐波那契数,并将它们存储在一个数组中,然后打印。这比我前面提到的要快 ((n-1)*(recursive call's overhead)) 倍。如果您觉得有帮助,请竖起大拇指:)
#include<iostream>
using namespace std;
int *arr;
int iter = 0;
int len;
int returnValue;
void exist(int num, int arr[] ) /* this function checks if the Fibonacci number that recursive function have calcuated is already in the array or not, mean if it is already calculated by some other recursive call*/
{
bool checkExistance = false; /* if this is true, means this Fibonacci number is already calculated and saved in array, so do not save it again*/
returnValue = num;
for (int i = 0; i< len; i++)
{
if(arr[i]==num)
{
checkExistance = true;
break;
}
}
if(!checkExistance)
{
arr[iter]=num;
iter++;
}
}
int fibonacci(int n)
{
if (n==1)
{
exist(1,arr);
return 1;
}
else if (n==2)
{
exist(1,arr);
return 1;
}
else
{
exist((fibonacci(n-1)+fibonacci(n-2)),arr);
return returnValue;
}
}
int main()
{
int n;
cout<<"Enter the number of Fibonacci you want to print: ";
cin>>n;
len = n;
arr = new int[n];
fibonacci(n);
arr[n-1] = 1;
cout<<"1:\t"<<arr[n-1]<<endl;
for (int i = 0; i< len-1; i++)
{
cout<<i+2<<":\t"<<arr[i]<<endl;
}
return 0;
}