我试图用c ++编写递归的斐波纳契序列,但是当我编译时,我得到一个错误

时间:2017-08-30 14:02:37

标签: c++ recursion fibonacci

当我尝试使用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);
}

3 个答案:

答案 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();
}