PHP中一个数字的递归和阶乘

bui*_*ude 5 php recursion

<?php  
function factorial_of_a($n)  
{  
    if($n ==0)  
    {  
        return 1;  
    }
    else   
    {    
        return $n * factorial_of_a( $n - 1 );  
    }  
}  
print_r( factorial_of_a(5) );
?>  
Run Code Online (Sandbox Code Playgroud)

我的疑问是:

return $n * factorial_of_a( $n - 1 ) ;
Run Code Online (Sandbox Code Playgroud)

在这个陈述中 - 它给出了20 $n = 5和/ 的结果$n - 1 = 4.但是当我运行时,答案120怎么样?嗯,120是正确答案......我不明白它是如何运作的.我使用了for-loop而且工作正常.

Bli*_*itZ 7

factorial_of_a(5)
Run Code Online (Sandbox Code Playgroud)

触发以下呼叫:

5 * factorial_of_a(5 - 1) ->
5 * 4 * factorial_of_a(4 - 1) ->
5 * 4 * 3 * factorial_of_a(3 - 1) ->
5 * 4 * 3 * 2 * factorial_of_a(2 - 1) ->
5 * 4 * 3 * 2 * 1 * factorial_of_a(1 - 1) ->
5 * 4 * 3 * 2 * 1 * 1
Run Code Online (Sandbox Code Playgroud)

所以,答案是120.

考虑阅读维基百科上的递归函数文章.

另外,请阅读此相关主题:什么是PHP中的RECURSIVE函数?


答案怎么回答120?

好吧,这个函数会调用自己$n - 1,而$n - 1不是等于0.如果是,则函数实际将结果返回给程序.所以它不会立即返回结果,而参数则更大0.它被称为递归的"终止条件".