0

我正在编写一个用于探索 XML 文档的函数,并且需要使用递归。这不是想要的,所以开始运行一些测试。

<?php

$i=0;
function recursion(){
    $i++;
    if($i < 10){recursion();}
    echo $i;
    }
recursion();
?> 

这会生成 500 内部服务器错误。好像我处理不当 - 有人可以帮助我吗?

4

7 回答 7

4

$i函数内部不引用全局变量$i,所以它总是1,脚本溢出堆栈。

您可以$i将其设为全局,但最好将其作为参数传递:

function recursion($i){
    $i++;
    if($i < 10){recursion($i);}
    echo $i;
}

recursion(0);
于 2012-09-17T12:59:40.853 回答
2
<?php

 function recursion($i = 0){
   $i++;
   if($i < 10){recursion($i);}
   echo $i;
  }
recursion();

?>

于 2012-09-17T13:00:52.240 回答
0

你错过了论点

$i=0;
function recursion($i){
    $i++;
    if($i < 10){recursion($i);}
    echo $i;
    }
recursion($i);
于 2012-09-17T13:00:36.353 回答
0

尝试i递增后作为参数传递给函数,否则无法识别

于 2012-09-17T13:00:38.043 回答
0

您在函数内部将 $i 引用为局部变量。如果要引用全局变量,请使用保留字 global:

<?php
    $i=0;
    function recursion(){
        global $i;
        $i++;
        if($i < 10){recursion();}
        echo $i;
    }
recursion();
?> 
于 2012-09-17T13:04:09.600 回答
0

其他答案可以正常工作,但没有人提到这个选项,所以我就把它扔在那里。

您还可以使用static关键字:

function recursion(){
    static $i = 0;
    $i++;
    if($i < 10){recursion();}
    echo $i;
}

recursion();
于 2012-09-17T13:09:47.210 回答
0

$i 的范围在您的示例中是本地的, $i 在每次调用时都会被初始化并成为无限循环。PHP 通过在达到 200 调用后产生致命错误来中止脚本

致命错误:达到“200”的最大函数嵌套级别,正在中止!

请试试,

$i = 0;
function recursion() {
    global $i;
    $i++;
    echo $i;
    if ($i < 10) {
        recursion();
    }
}

recursion();
于 2012-09-17T13:10:51.560 回答