<?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而且工作正常.
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
.它被称为递归的"终止条件".