我试图理解这个递归函数。当我用不同的数字回显时,它会返回不同的结果。我无法理解这实际上是如何运作的。
<?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
答案 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
}
}
}
}
}
希望这是有道理的:)