当我尝试使用c ++中的递归算法计算斐波纳契数列时,我得到一个关于内存分配的错误。我可以运行一个具有void返回的递归算法,但是当返回int时,内存存在问题。有办法解决这个问题吗?
#include <iostream>
using namespace std;
int fib(int start);
int main()
{
int x,y;
cout << "Enter a value for x: ";
cin >> x;
y = fib(x);
cout << "Your product is: ";
cout << y << endl;
return 0;
}
int fib(int start){
if(start == 0 || start == 1){
return start;
}
return fib(start)*fib(start-1);
}
答案 0 :(得分:2)
问题是斐波那契功能不正确......
如果您的变量start
恰好与0或1不同,那么您可以反复使用函数fib(start)
return fib(start)*fib(start-1);
将产生一个stackoverflow,因为该函数无限地调用它自己。
另一方面,你不应该乘以这些值,而是添加它
return fib(n - 1) + fib(n - 2);
答案 1 :(得分:1)
fib()
将无法正常工作,
请试试这个:
if(n == 0 || n == 1)
{
return n;
}
else
return ( fib(n-1) + fib(n-2) );
答案 2 :(得分:0)
要查看发生了什么,我建议在上述答案中添加以下内容: 还可以找到Big O标记 #include
using namespace std;
int fib(int n, int &count) {
if (n == 0 || n == 1)
{
return n;
}
else
{
cout << "n: " << n << endl;
count += 1;
return (fib(n - 1, count) + fib(n - 2, count));
}
}
int main()
{
int count = 0;
cout << fib(9, count) << endl;
cout << "Parses Count : " << count << endl;
cin.get();
cin.ignore();
}