在调用自身后调用自身不执行任何操作的递归函数

时间:2013-04-15 04:01:36

标签: php

我有一个自我调用的递归函数,任何其他调用都没有任何反应。 意思是,第一次运行该函数虽然运行正常,但是当它以递归方式运行时,这些调用都没有做任何事情。

代码如下所示:

<?php
for($i=0; i<=$arr.length()-1; $i++;){
    function recursiveEcho(string){
        echo $arr[i];
        recursiveEcho($arr[i+1]);
    }
}
?>

真正的代码比echo更复杂,它在这个函数之外工作正常,但当我把它放入它时它不起作用。

4 个答案:

答案 0 :(得分:3)

你的代码有点奇怪。如果你想打印数组的所有元素,你只需要做一个简单的循环:

for($i = 0 ; i < count($arr) ; $i++) {
    echo $arr[$i];
}

但是,如果你想以递归方式进行,你应该写一些类似的东西:

<?php

// take the array as reference (avoid copies)
function recursiveEcho(&$arr, $i){

    // Stop the recursion when we are at the end of the array
    if ($i >= count($arr))
        return;

    // print the current value
    echo $arr[$i];

    // recursively call the function for the next value
    recursiveEcho($arr, $i+1);
}


recursiveEcho($arr, 0);

?>

答案 1 :(得分:0)

您调用的函数是无限递归的。使用递归时,必须始终使用结束条件。要打印阵列的所有元素,请使用

<?php
$arr=[1,2,3,4];
$n=count(($arr);
recursiveEcho(0);
function recursiveEcho($a)
{
    if($a==$n)
        return;
    else
    {
        echo $arr[$a]
        recursiveEcho($a+1)
    }
}

答案 2 :(得分:0)

你是说这个吗?

$arr = [1,2,3,4];

function recursiveEcho($i=0) {
  echo $arr[$i];
  if ($i < count($arr)-1) recursiveEcho(++$i);
}

recursiveEcho(); //=> 1..2..3..4

答案 3 :(得分:0)

您不能多次定义一个函数;它将在第二次迭代中炸毁你的脚本。

在这种情况下实现递归的正确方法是完全放弃循环并生成这样的有界递归函数:

function recursiveEcho($arr, $i, $n)
{
    if ($i < $n) {
        echo $arr[$i];
        recursiveEcho($arr, $i + 1, $n);
    }
}

recursiveEcho($arr, 0, count($arr));