Javascript 如何停止函数递归

Javascript 如何停止函数递归,javascript,Javascript,我有一个自己调用的递归函数。但我想在特定情况下停止它,比如break,当然它不是一个循环,所以我不能使用break。有什么办法吗?多谢各位 函数在这里,你可能会看到一个中断,这时我想停止函数调用。谢谢大家! function generateParseTree(parsingArray, left, right, rootIndex) { probability *= parsingArray[left][right][rootIndex].prob; if (!parsingA

我有一个自己调用的递归函数。但我想在特定情况下停止它,比如break,当然它不是一个循环,所以我不能使用break。有什么办法吗?多谢各位

函数在这里,你可能会看到一个中断,这时我想停止函数调用。谢谢大家!

function generateParseTree(parsingArray, left, right, rootIndex) {
    probability *= parsingArray[left][right][rootIndex].prob;
    if (!parsingArray[left][right][rootIndex]['divide']) {
        if (left == parsingArray.length - 2 && right == parsingArray.length - 1) {
            if (probability > 1e-6) {
                suming ++;
                break;
            }
            return;
        } else {                    
            return;
        }
    }
    generateParseTree(parsingArray, left, parsingArray[left][right][rootIndex]['divide'], parsingArray[left][right][rootIndex]['right1Index']);
    generateParseTree(parsingArray, parsingArray[left][right][rootIndex]['divide'], right, parsingArray[left][right][rootIndex]['right2Index']);
        return;

}
更新-----------------------------------

很抱歉,我的逻辑有点混乱,函数被调用了很多次,在每次递归中都可能出现中断的情况。我想要的是,当它第一次到达停止位置时,所有的递归都停止了

解决方案-----------------------------------

我使用try-catch来实现我的设计,
break
被替换为
throw“flag”
,这样,当我捕获抛出的标志时,我就可以中断第一次调用此函数的循环


谢谢大家!

你就不能从你要放
的地方
返回

您可以更改函数以返回一个指示是否继续的值。在再次调用函数时,只需检查返回值,然后继续

<script>
function f(){
  // your code here
  if(breakTheCode){
    return -1;
  }
  if(f()==-1){ // recursion
    return -1;
  }
  return 1;
}
</script>

函数f(){
//你的代码在这里
如果(断开代码){
返回-1;
}
如果(f()==-1){//递归
返回-1;
}
返回1;
}

为什么不使用return而不是break?

既然代码中已经有了return,我假设您知道此时可以从函数返回

您可以返回一个表示其他地方的值

您想要的功能几乎是(或是)一个goto

因此,由于异常的运行方式与gotos非常相似,因此可以通过在发生异常时抛出异常来实现如下方法

function generateParseTree(parsingArray, left, right, rootIndex) {
   try
    {
        probability *= parsingArray[left][right][rootIndex].prob;
        if (!parsingArray[left][right][rootIndex]['divide']) {
            if (left == parsingArray.length - 2 && right == parsingArray.length - 1) {
                if (probability > 1e-6) {
                    suming ++;
                    throw "this thing is done";
                }
                return;
            } else {                    
                return;
            }
        }
        generateParseTree(parsingArray, left, parsingArray[left][right][rootIndex]['divide'], parsingArray[left][right][rootIndex]['right1Index']);
        generateParseTree(parsingArray, parsingArray[left][right][rootIndex]['divide'], right, parsingArray[left][right][rootIndex]['right2Index']);
        return;
      }
      catch (err)
      {
           console.log(err); // "this thing is done"
      }
    }

通常,如果你只写
return
,它会中断函数并返回一个
未定义的
对象。

你可以使用“return”而不是“break”

尝试使用return???要退出函数,只需像在其他地方一样使用
return
。你的语法没有突出显示,问题并不是孤立的,代码对于完全重现您的问题并没有帮助。我试图在一次编辑中对其进行改进,但失败了-请改进您的问题。这就是您在这里实际要问的问题:“我如何
打破
嵌套递归?”@Burki因为他在每个循环中调用函数两次,return不会解决问题,第二个函数仍然会被调用。是的,请尝试catch确实符合我的目的。非常感谢。