PHP递归函数中变量值冲突:如何避免重复赋值导致结果错误?
php函数递归调用问题
函数 sd 会递归调用自身,传入参数 $a 和 $b,并计算变量 $c 的值。问题是函数在第一次递归调用后, $c 变量在第一次递归调用之前和之后被赋值了不同的值,导致结果不正确。
分析函数调用
第一次调用 sd() 函数时,$a 为 3、$b 为 2。
立即学习“PHP免费学习笔记(深入)”;
c 计算为 5,5 小于 6,所以递归调用 sd(3, 5)。
在第二个递归调用中,c 计算为 8,8 大于 6,所以函数打印 8 并返回。
回到第一个递归调用,c 已经被赋值为 8,但此时还在第一个递归调用中。
第一个递归调用返回后,c 重新赋值为 3 2 = 5。
最后,c 的最终值是 5,而不是预期的 8。
解决方法
问题在于 $c 变量在函数调用的过程中被重复赋值,因此解决方案是避免在递归调用后重新赋值 $c。
修改后的代码如下:
<?phpfunction sd($a = 3, $b = 2){ static $c; // 使用 static 变量保存 $c,避免重复赋值 if (is_null($c)) { $c = $a + $b; } if ($c < 6) { sd($a, $c); } echo $c;}sd();?>