PHP前端开发

PHP递归函数中变量值冲突:如何避免重复赋值导致结果错误?

百变鹏仔 3天前 #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();?>