我创建了一个使用递归的非常简单的程序.我正在使用g ++编译器.我可以编译它,但是当我尝试运行它时,我收到一条错误消息,上面写着SEGMENTATION FAULT.这是我的代码:
#includeusing 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--); } }
Jesse Rusak.. 33
在递归调用中,您使用的是postfix --
(numTimes--
),而不是前缀version(--numTimes
).结果,numTimes
在递归调用之后递减值.这意味着无限地调用Recurse.使用前缀版本(将在调用之前递减它),或者只是传递numTimes-1
(因为numTimes值不需要修改).
您看到段错误的原因是您的堆栈溢出到受保护的内存中.
在递归调用中,您使用的是postfix --
(numTimes--
),而不是前缀version(--numTimes
).结果,numTimes
在递归调用之后递减值.这意味着无限地调用Recurse.使用前缀版本(将在调用之前递减它),或者只是传递numTimes-1
(因为numTimes值不需要修改).
您看到段错误的原因是您的堆栈溢出到受保护的内存中.
它可能是导致无限递归的"numTimes--".后缀 - 将减少 - 方法中的值,但将返回变量的原始值.
尝试将其更改为--numTimes.