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