函数自调用循环return后有什么弊端?

以JS为例

function func(){    
    ...    
    ...    
    if(!...){
     func();
     return;
    }    
    ...    
    ...    
    if(!...){
     func();
     return;
    }    
    ...
    ...
    func();
}

我有个需求是不停的执行这个任务,条件不成立则重新执行,这样的循环有什么弊端呢~ 感觉怪怪的~~
如果有弊端java、js、php、中弊端相同吗?

阅读 1.8k
3 个回答

递归调用的话,会有最大调用栈的限制,当然……如果业务判断都超出了最大调用栈那确实很可怕了。

还有一个问题,就是递归进去的可能存在内存不释放的问题,可以换个方案,如使用 do...while

<?php
$foo = 0;
function foo()
{
    global $foo;
    if ($foo < 1000000) {//逻辑 ~
        $foo += 1;
        return false;// 不成立就返回 false
    }
    return true;
}

$do = true;
do {
    // 这里多了一步取反,如果不想要这个取反,那方法里面的返回值反过来就行,只是方法里面条件不成立 返回 false 更加符合常理一些。
    $do = !foo();
} while ($do);

递归的弊端写的不好就会爆栈,你可以把这个function拆分为两个,一个死循环用于逻辑判断,一个用于执行业务。

递归必须要有出口,你这程序怎么没出口?还有递归最好限定最大次数,不然容易爆炸。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏