函数不';递归函数php中的t返回值

函数不';递归函数php中的t返回值,php,function,loops,recursion,Php,Function,Loops,Recursion,我想使用递归函数返回一些值。不幸的是,在我将return更改为echo之前,函数不会返回任何内容。 下面是我为更好地理解而创建的类似函数 function debug($a, $i) { $a .= $i; if ($i !== 5) { $i++; debug('echo', $i); } else { return $a; // expecting echo5 (echo works perfectly) } } ech

我想使用递归函数返回一些值。不幸的是,在我将
return
更改为echo之前,函数不会返回任何内容。 下面是我为更好地理解而创建的类似函数

function debug($a, $i) {
    $a .= $i;

    if ($i !== 5) {
      $i++;
      debug('echo', $i);
    } else {
      return $a; // expecting echo5 (echo works perfectly)
    }
}

echo debug('echo', 0); // doesn't return anything

该功能按预期100%工作。不能仅仅因为函数正在“返回”值就打印该值。如果您希望打印值,则必须按照您自己的观察结果进行回显

这样想:

Return-返回原始数据中的值

回声打印的东西

同样,递归函数现在的工作方式是,它只包含其范围内的返回值,因此当执行完成时,该值将被“删除”。这就是为什么你不能回应任何东西。当您在函数内部回送时,它会在停止执行之前回送值

避免这种情况的一种方法是,如果希望打印值,可向函数中添加一个打印参数

例如:

function debug($a, $i, $print=false) {
    $a .= $i;
    if($i < 5) {
        $i++;
        debug('echo', $i, $print);
    } else{
        if($print){
            echo $a;
        }
        return $a;
    }
}
debug('echo', 0, true);
函数调试($a,$i,$print=false){
$a.=$i;
如果($i<5){
$i++;
调试('echo',$i,$print);
}否则{
如果($print){
echo$a;
}
返回$a;
}
}
调试('echo',0,true);

该功能按预期100%工作。不能仅仅因为函数正在“返回”值就打印该值。如果您希望打印值,则必须按照您自己的观察结果进行回显

这样想:

Return-返回原始数据中的值

回声打印的东西

同样,递归函数现在的工作方式是,它只包含其范围内的返回值,因此当执行完成时,该值将被“删除”。这就是为什么你不能回应任何东西。当您在函数内部回送时,它会在停止执行之前回送值

避免这种情况的一种方法是,如果希望打印值,可向函数中添加一个打印参数

例如:

function debug($a, $i, $print=false) {
    $a .= $i;
    if($i < 5) {
        $i++;
        debug('echo', $i, $print);
    } else{
        if($print){
            echo $a;
        }
        return $a;
    }
}
debug('echo', 0, true);
函数调试($a,$i,$print=false){
$a.=$i;
如果($i<5){
$i++;
调试('echo',$i,$print);
}否则{
如果($print){
echo$a;
}
返回$a;
}
}
调试('echo',0,true);

只需从递归调用返回值即可捕获结果

编辑:

下面是一种处理代码的新方法

  • 如果要传递的数字大于5,则减去1 每个递归调用
  • 如果数字小于5,则每次递归调用加1
  • 否则返回5
因此,当它达到5时,输出将是例如
echo012345
echo98765

<?php
function debug($a, $i) {
   $a .= $i;

   if ($i > 5) {
       $i--;
       return debug($a, $i);
   } elseif ($i < 5) {
       $i++;
       return debug($a, $i);
   }
   return $a;
}

echo debug('echo', 10);

?>

如果要将输出限制为
echo5
,则应使用If语句包装
$a.=$i
,以检查
If($i==5)


只需从递归调用返回值即可捕获结果

编辑:

下面是一种处理代码的新方法

  • 如果要传递的数字大于5,则减去1 每个递归调用
  • 如果数字小于5,则每次递归调用加1
  • 否则返回5
因此,当它达到5时,输出将是例如
echo012345
echo98765

<?php
function debug($a, $i) {
   $a .= $i;

   if ($i > 5) {
       $i--;
       return debug($a, $i);
   } elseif ($i < 5) {
       $i++;
       return debug($a, $i);
   }
   return $a;
}

echo debug('echo', 10);

?>

如果要将输出限制为
echo5
,则应使用If语句包装
$a.=$i
,以检查
If($i==5)



谢谢您的回答。但是不应该
echo调试('echo',0)
返回
echo5
,它保存在
$a
中?我需要返回值。我得到以下错误:允许的内存大小134217728字节已用尽(尝试分配16384字节)。在这种情况下,函数循环是无止境的。你是对的。如果希望打印值,可以添加一个打印参数,以便使用函数进行解析。这是解决问题的一种方法至少。。。检查更新的答案。感谢您的回答。但是不应该
echo调试('echo',0)
返回
echo5
,它保存在
$a
中?我需要返回值。我得到以下错误:允许的内存大小134217728字节已用尽(尝试分配16384字节)。在这种情况下,函数循环是无止境的。你是对的。如果希望打印值,可以添加一个打印参数,以便使用函数进行解析。这是解决问题的一种方法至少。。。检查更新的答案。谢谢你的帮助。但在这种情况下,函数循环是无止境的,不是吗?谢谢你的努力。但在这种情况下,函数循环是无限的,不是吗?