我试图用c++;但是当我编译时,我得到了一个错误 当我尝试用C++递归算法计算斐波那契数列时,内存分配错误。我可以运行一个返回值为void的递归算法,但是当and 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); } #包括 使用名称空间std; int fib(int start); int main() { int x,y; cout>x; y=fib(x); 问题是斐波那契函数不正确
如果变量我试图用c++;但是当我编译时,我得到了一个错误 当我尝试用C++递归算法计算斐波那契数列时,内存分配错误。我可以运行一个返回值为void的递归算法,但是当and 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); } #包括 使用名称空间std; int fib(int start); int main() { int x,y; cout>x; y=fib(x); 问题是斐波那契函数不正确,c++,recursion,fibonacci,C++,Recursion,Fibonacci,如果变量start恰好与0或1不同,则可以反复调用函数fib(start) return fib(start)*fib(start-1); 这将产生stackoverflow,因为函数正在无限地调用自身 另一方面,您不应该将这些值相乘,而是将其相加 return fib(n - 1) + fib(n - 2); 问题是斐波那契函数不正确 如果变量start恰好与0或1不同,则可以反复调用函数fib(start) return fib(start)*fib(start-1); 这将产生st
start
恰好与0或1不同,则可以反复调用函数fib(start)
return fib(start)*fib(start-1);
这将产生stackoverflow,因为函数正在无限地调用自身
另一方面,您不应该将这些值相乘,而是将其相加
return fib(n - 1) + fib(n - 2);
问题是斐波那契函数不正确 如果变量
start
恰好与0或1不同,则可以反复调用函数fib(start)
return fib(start)*fib(start-1);
这将产生stackoverflow,因为函数正在无限地调用自身
另一方面,您不应该将这些值相乘,而是将其相加
return fib(n - 1) + fib(n - 2);
fib()
将无法正常工作,
请试试这个:
if(n == 0 || n == 1)
{
return n;
}
else
return ( fib(n-1) + fib(n-2) );
fib()
将无法正常工作,
请试试这个:
if(n == 0 || n == 1)
{
return n;
}
else
return ( fib(n-1) + fib(n-2) );
要了解发生了什么,我建议在上述答案中添加以下内容: 还允许您找到大O符号 #包括
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();
}
使用名称空间std;
整数fib(整数n、整数和计数){
如果(n==0 | | n==1)
{
返回n;
}
其他的
{
cout要了解发生了什么,我建议在上述答案中添加以下内容:
还允许您找到大O符号
#包括
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();
}
使用名称空间std;
整数fib(整数n、整数和计数){
如果(n==0 | | n==1)
{
返回n;
}
其他的
{
调用fib(start)
时不能修改start
,它应该如何达到1或0?获取有关内存分配的错误。请发布错误消息。如果调用fib(2)
,会发生什么情况?它递归调用fib(2)
,递归调用fib(2)
,递归调用fib(2)
,递归调用fib(2)
,这…对你的程序的健康不好。斐波那契的递归不是fib(start)*fib(start-1)
,而是fib(start-1)+fib(start-2)
。哦,我明白了。因为无限递归,你有一个非常适合这个站点的错误。你在调用fib(start)时不修改start
,它应该如何达到1或0?获取有关内存分配的错误。请发布错误消息。如果调用fib(2)
,会发生什么情况?它递归调用fib(2)
,递归调用fib(2)
,递归调用fib(2)
,这…对你的程序的健康不好。斐波那契的递归不是fib(开始)*fib(开始-1)
,而是fib(开始-1)+fib(开始-2)
。哦,我明白了。因为无限递归,你有一个非常适合这个站点的错误。。