0

自分自身を呼び出す再帰関数があり、他の呼び出しでは何も起こりません。つまり、関数が初めて実行されたときは正常に実行されますが、再帰的に実行されると、これらの呼び出しは何もしません。

コードは次のようになります。

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

実際のコードはエコーよりも複雑になり、この関数の外ではうまく機能しますが、それを入れると機能しません。

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

関数を複数回定義することはできません。2回目の繰り返しでスクリプトを爆破します。

この場合に再帰を実装する正しい方法は、ループを完全に削除して、次のような限定再帰関数を作成することです。

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 に答える
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 に答える