为什么这个递归的例子不起作用?

时间:2012-09-17 12:58:25

标签: php recursion

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

<?php

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

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

7 个答案:

答案 0 :(得分:4)

函数内部的

$i不引用全局变量$i,因此它始终为1并且脚本溢出堆栈。

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

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

recursion(0);

答案 1 :(得分:2)

<?php

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

&GT?;

答案 2 :(得分:0)

你错过了论点

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

其他答案可以正常使用,但是没有人提到这个选项,所以我只是把它扔出去。

您还可以使用static关键字:

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

recursion();

答案 6 :(得分:0)

$ i的范围在您的示例中是本地的,$ i在每次调用时都被初始化并变为无限循环。 PHP通过在达到200调用

后产生致命错误来中止脚本

致命错误:达到最大功能嵌套级别'200',正在中止!

请尝试,

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

recursion();