PHP递归函数详解:剖析加法函数的意外输出
本文分析一个PHP递归函数的示例,解释其输出结果与预期不符的原因。代码如下:
<?php
function sd($a=3,$b=2){
$c = $a + $b;
if($c < 6){
sd($a,$c);
}
echo $c;
}
sd();
?>
该函数sd()接受两个参数a和b,默认值分别为3和2。函数计算a和b的和,赋值给c。如果c小于6,则递归调用自身,并将a和新的c值作为参数传递。最后,函数打印c的值。
执行sd()后,输出结果为“85”,而非预期的“8”。这是因为对递归调用和echo语句执行顺序的理解存在偏差。
程序执行流程如下:
- 初次调用sd(),a=3, b=2, c = 3 + 2 = 5。由于c
- 递归调用中,a=3, b=5, c = 3 + 5 = 8。此时c >= 6,递归结束。echo $c; 打印8。
- 程序返回到第一次调用sd()的位置。echo $c; 打印第一次调用时的c值,也就是5。
因此,最终输出为“85”。并非变量c未被覆盖,而是echo语句位于函数末尾,每次递归结束都会执行,导致两次打印。
要得到结果“8”,需修改函数逻辑,例如将echo语句放在if条件语句内,或仅在递归结束时打印最终结果。 修改后的代码可以如下:
<?php
function sd($a=3,$b=2){
$c = $a + $b;
if($c < 6){
return sd($a,$c);
}
return $c;
}
echo sd();
?>
这个修改后的版本使用return语句返回c的值,确保只在递归结束后打印最终结果。
以上就是PHP递归函数的意外输出:为什么简单的加法函数会打印“85”而不是“8”?的详细内容,更多请关注知识资源分享宝库其它相关文章!
版权声明
本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com
发表评论