PHP递归函数的意外输出:为什么简单的加法函数会打印“85”而不是“8”?

心靈之曲
发布: 2025-03-27 09:46:16
原创
731人浏览过

php递归函数的意外输出:为什么简单的加法函数会打印“85”而不是“8”?

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语句执行顺序的理解存在偏差。

立即学习PHP免费学习笔记(深入)”;

程序执行流程如下:

  1. 初次调用sd(),a=3, b=2, c = 3 + 2 = 5。由于c
  2. 递归调用中,a=3, b=5, c = 3 + 5 = 8。此时c >= 6,递归结束。echo $c; 打印8。
  3. 程序返回到第一次调用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”?的详细内容,更多请关注php中文网其它相关文章!

全能打印神器
全能打印神器

全能打印神器是一款非常好用的打印软件,可以在电脑、手机、平板电脑等设备上使用。支持无线打印和云打印,操作非常简单,使用起来也非常方便,有需要的小伙伴快来保存下载体验吧!

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号