0

我有一个调用自身的递归函数,并且在任何其他调用上都没有发生任何事情。意思是,第一次运行该函数时它运行良好,但是当它递归运行时,这些调用都没有做任何事情。

代码如下所示:

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

真正的代码会比 echo 更复杂,并且在这个函数之外它工作得很好,但是当我把它放进去时它不起作用。

4

4 回答 4

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);

?>
于 2013-04-15T04:07:19.910 回答
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)
    }
}
于 2013-04-15T04:08:03.693 回答
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
于 2013-04-15T04:09:14.840 回答
0

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

在这种情况下实现递归的正确方法是完全放弃循环并创建一个有界递归函数,如下所示:

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

recursiveEcho($arr, 0, count($arr));
于 2013-04-15T04:10:58.360 回答