让我理解PHP的这种递归功能

时间:2015-03-08 05:25:22

标签: php recursion

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

    <?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

2 个答案:

答案 0 :(得分:0)

每次调用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

答案 1 :(得分:0)

你的功能现在说:

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
                }
            }
        }
    }
}

希望这是有道理的:)