假设我们有一个简单的递归.
int x(int a){
if(a<10)
x(a+1);
else
!STOP!
b++;
return b;
}
Run Code Online (Sandbox Code Playgroud)
Globaly:
int b=0;
Run Code Online (Sandbox Code Playgroud)
在主要我们可以有这样的事情:
int p=x(1);
Run Code Online (Sandbox Code Playgroud)
有没有办法停止递归,使p为0,这意味着永远不会执行"b ++".
如果你能告诉我一些表达而不是!停止,我将不胜感激!
但是,我不想要这样的东西,我只是想停止递归,就像休息一样; 在while()循环中执行...:
int ok=0;
int x(int a){
if(a<10)
x(a+1);
else
ok=1;
if(ok==0)
b++;
return b;
}
Run Code Online (Sandbox Code Playgroud)
如果对这个问题有任何不清楚的地方,那就问问吧.
你为什么不这样做?
int x(int a){
if(a<10) {
x(a+1);
b++;
}
return b;
}
Run Code Online (Sandbox Code Playgroud)
但问题是,你在一个递归例程中修改一个全局,这不是特别线程安全和非常草率.除了顶级调用者之外,您将返回一个始终被忽略的值.你也做了一些比循环更好的事情(但我认为你的实际案例比这更大,或者你是学生).
你不能真正"打破"递归 - 回归顺利.在oldey-timey C中你可能会使用setjmp/longjmp(以及它的所有危险 - 换句话说,DO NOT),而在C++中你可能会使用try/catch/throw,它也会使用它来展开堆栈.