我有一个递归函数,它调用自己,在其他任何调用中都没有发生任何事情。也就是说,函数第一次运行时运行得很好,但是当它递归运行时,这些调用都不做任何事情。
代码如下:
<?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));