C++ C++;在C+;中运行代码后的递归错误消息+;17
为什么如果我在运行完这段代码后继续运行,就会出现错误,并且在Windows7中会弹出错误消息 main.cppC++ C++;在C+;中运行代码后的递归错误消息+;17,c++,recursion,C++,Recursion,为什么如果我在运行完这段代码后继续运行,就会出现错误,并且在Windows7中会弹出错误消息 main.cpp #include <iostream> void g(int n) { if(n == 1) { std::cout << " V0id " << std::endl; return; } g(n - 1); std::cout << n << " -
#include <iostream>
void g(int n) {
if(n == 1) {
std::cout << " V0id " << std::endl;
return;
}
g(n - 1);
std::cout << n << " - 1 " << std::endl;
g(n - 2);
std::cout << n << " - 2 " << std::endl;
}
int main(void) {
g(10);
return 0;
}
#包括
空g(整数n){
如果(n==1){
标准::cout
windows 7错误消息刚刚弹出
这是因为您的代码在无限循环中运行,而应用程序由于“堆栈溢出”而崩溃
如果(n==1)
如果执行进入时不匹配
g(n-2)
结果是传递给函数的是一个负数,执行以无限循环进行。
要测试这一点,请添加
cout << "Top" << n << endl;
你确定你的递归停止了吗?如果你写的代码没有编译,就加上检查n==0
。你不能返回0;
在声明为不返回任何值的函数中。如果你试着用2而不是10作为起始值来调试你的程序,你应该能够很容易地找到问题,因为只有几个步骤是n在问题发生之前执行eed。而且由于您编写了输出,因此更容易。@我认为这个条件没有帮助。因为传递的值变为负数,执行进入无限循环。最好将n添加到<0
void g(int n) {
cout << "Top" << n << endl;
if (n < 1) {
std::cout << " V0id " << std::endl;
return;
}
g(n - 1);
std::cout << n << " - 1 " << std::endl;
g(n - 2);
std::cout << n << " - 2 " << std::endl;
}