函数不';递归函数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
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
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字节)。在这种情况下,函数循环是无止境的。你是对的。如果希望打印值,可以添加一个打印参数,以便使用函数进行解析。这是解决问题的一种方法至少。。。检查更新的答案。谢谢你的帮助。但在这种情况下,函数循环是无止境的,不是吗?谢谢你的努力。但在这种情况下,函数循环是无限的,不是吗?