调用自身的递归函数在调用自身后不做任何事情


recursive function that calls on itself not doing anything after calling itself

我有一个递归函数,它调用自己,在其他任何调用中都没有发生任何事情。也就是说,函数第一次运行时运行得很好,但是当它递归运行时,这些调用都不做任何事情。

代码如下:

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

实际的代码将比echo更复杂,它在这个函数之外工作得很好,但是当我把它放在里面时,它就不起作用了

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

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

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

<?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)
    }
}

你是这个意思吗?

$arr = [1,2,3,4];
function recursiveEcho($i=0) {
  echo $arr[$i];
  if ($i < count($arr)-1) recursiveEcho(++$i);
}
recursiveEcho(); //=> 1..2..3..4

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

在这种情况下,实现递归的正确方法是完全放弃循环,并创建一个有界递归函数,如下所示:
function recursiveEcho($arr, $i, $n)
{
    if ($i < $n) {
        echo $arr[$i];
        recursiveEcho($arr, $i + 1, $n);
    }
}
recursiveEcho($arr, 0, count($arr));