递归PHP函数不会停止并冻结我的浏览器

时间:2011-11-20 02:03:01

标签: php recursion

我有以下递归函数:

$cogs = array('hello', 'how', 'are', 'you');

$wheels = array();

foreach($cogs as $cog)
{
    $wheels[] = array($cog);
}

function recursive($placement){
    $counter = count($placement);
    $nword = '';    
    for($i = 0; $i < $counter; $i++) {
        $nword .= $placement[$i][0];
        echo $nword;
    }
    recursive($placement);
}

recursive($wheels);

显然我做错了,因为我的功能一直在继续。我无法弄清楚为什么......我是PHP中的递归函数的新手,所以对此解决方案的任何帮助将不胜感激。有一个安全网的最佳方法是什么,所以我的PHP函数不能永远运行任何递归函数?

2 个答案:

答案 0 :(得分:5)

它不会停止,因为recursive是一个无限循环。你写过:

function recursive($placement) {
    // Code that doesn't return, and outputs text
    recursive($placement);
}

为什么你希望永远终止?

任何递归函数都需要有一些最终证明为真的条件,并且在证明为true时将终止递归。

您的浏览器正在冻结,因为您的PHP脚本发送给它的大量输出可能很难。

大多数PHP安装最终会终止运行时间过长的脚本。但是,如上所述,如果必须处理来自无限循环的大量输出,您的浏览器可能会遇到困难。

答案 1 :(得分:0)

因为您没有停止条件。在你的函数中,每次打印相同的东西(数组中每个变量的第一个位置),之后你再次使用相同的输入调用相同的函数。