让我了解PHP的这个递归函数


Let me understand this recursive function of PHP

我试图理解这个递归函数。当我用不同的数字回显出来时,它会返回不同的结果。我不明白这实际上是如何工作的。

    <?php 
       function head_sum($x) {
        return ($x == 1) ? $x : $x + head_sum($x - 1);
    }

    echo head_sum(5);//15
    echo head_sum(2);//3
    echo head_sum(3);//6

你现在的函数说:

if variable x equals 1 then
return variable x
else
return variable x + this function( variable x -1 )

因此,这将一直运行,直到$x等于 1。在那之前,它会不断添加自己。

So when you type echo head_sum(5):
head_sum(5); //$x = 5
head_sum(4); //$x = 5+4
head_sum(3); //$x = 5+4+3
head_sum(2); //$x = 5+4+3+2
head_sum(1); //$x = 5+4+3+2+1 = 15


这也可以这样表示(希望我可以在没有白板的情况下正确显示这一点)
function headsum(5){
    return 5 + head_sum( 5-1 ){
        return 4 + head_sum( 4-1 ){
            return 3 + head_sum( 3-1 ){
                return 2 + head_sum( 2-1 ){
                    return 1
                }
            }
        }
    }
}

希望这是有道理的:)

每次调用head_sum时都会调用多次。第一次直通一直进行,直到内部head_sum调用自己。它继续这样做,直到它下降1下降到1此时有条件退出。

所以对于head_sum(5)

5进去,i保存到$x.

内部递归调用

head_sum( 5 -1 ) // 4

然后3

然后2

然后1

( $x == 1 )检查在添加总计数后退出函数,此时总计数递增为:

5 + 4 + 3 + 2 + 1 = 15