简单的递归问题

Cri*_*sty 1 c++ recursion

假设我们有一个简单的递归.

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)

如果对这个问题有任何不清楚的地方,那就问问吧.

pli*_*nth 7

你为什么不这样做?

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,它也会使用它来展开堆栈.

  • 虽然你*可以*在这里使用例外,但你真的*不应该*.例外应该是*特殊*(即罕见的,意外的)情况.它们不应用于流量控制. (4认同)