我创建了一个使用递归的非常简单的程序。我正在使用g ++编译器。我可以编译它,但是当我尝试运行它时,我收到一条错误消息,上面写着SEGMENTATION FAULT。这是我的代码:
#include <iostream.h>
using namespace std;
int Recurse(int);
int main(int argc, char *argv[])
{
Recurse(10);
cout << endl;
}
int Recurse(int numTimes)
{
if (numTimes == 0)
return 0;
else
{
cout << numTimes << " ";
Recurse(numTimes--);
}
}
答案 0 :(得分:33)
在递归调用中,您使用的是后缀--
(numTimes--
),而不是前缀版本(--numTimes
)。结果,numTimes
的值在递归调用之后递减。这意味着无限地调用Recurse。使用前缀版本(在调用之前将其递减),或者只传递numTimes-1
(因为numTimes值不需要修改)。
您看到段错误的原因是您的堆栈溢出到受保护的内存中。
答案 1 :(得分:5)
可能是导致无限递归的“numTimes--”。后缀 - 将减少 - 方法中的值,但将返回变量的原始值。
尝试将其更改为--numTimes。
答案 2 :(得分:3)
在将numTimes传递给Recurse()之后,你正在递增numTimes,所以你通过连续递归Recurse并使用值10并且从不向cout输出任何内容来吹嘘堆栈。
答案 3 :(得分:3)
首先,您要使用
#include <iostream>
没有.h
现在为该计划:
#include <iostream>
using namespace std;
int Recurse(int);
int main(int argc, char *argv[]) {
Recurse(10);
cout << endl;
}
int Recurse(int numTimes) {
if (numTimes == 0)
return 0;
else {
cout << numTimes << " ";
return Recurse(--numTimes);
}
}
您需要在评估前应用-1。