Function 在开始阶段需要明确递归函数的概念
今天我第一次尝试通过在线教程学习递归函数,但仍停留在初级阶段。我找到了下面的代码,但它为我提供了针对任何值的“输出:1”。 因此,我需要更好的解释:Function 在开始阶段需要明确递归函数的概念,function,recursion,Function,Recursion,今天我第一次尝试通过在线教程学习递归函数,但仍停留在初级阶段。我找到了下面的代码,但它为我提供了针对任何值的“输出:1”。 因此,我需要更好的解释: function factorial($n){ if($n==0){ return 1; } return fact($n, 1); } function fact($i, $j){ if($i<1){ return 1;} else { return fact($i-1, $i*$j); } } echo factorial(5); 函数
function factorial($n){
if($n==0){
return 1;
}
return fact($n, 1);
}
function fact($i, $j){
if($i<1){
return 1;}
else {
return fact($i-1, $i*$j);
}
}
echo factorial(5);
函数阶乘($n){
如果($n==0){
返回1;
}
返回事实($n,1);
}
函数事实($i,$j){
如果($i这里有一个函数factorial
,它调用递归函数fact
。递归函数总是这样工作的:
- 如果你用一个“琐碎”的参数来调用它,它可以立即给你答案。在你的代码中,这是说
If($i)的部分,用第9行写这个例子,作为return$j;}
非常感谢你的巨大努力…我也很清楚它的概念。再次感谢
fact(i, j) = fact(i-1, i*j)
= fact(i-2, (i-1)*(i*j)) = fact(i-3, (i-2)*(i-1)*i*j)
= ... = fact(1, (i-(i-1)) * (i-(i-2)) * ... * (i-1) * i * j)
= fact(0, (i-i) * (i-(i-1)) * (i-(i-2)) * ... * (i-1) * i * j)
= (i-i) * (i-(i-1)) * (i-(i-2)) * ... * (i-1) * i * j # Because 0<1
= i! * j
function factorial($n){
if($n==0){ # The trivial case
return 1;
}
# Every other case is "complicated": call a specialized function.
return fact($n, 1);
}
function fact($i, $j){
# Helper function: returns i!*j, doing a recursive calculation.
if($i<1){ # The trivial case
return j; # i!*j for i<1 is just j
}
else { # The "complicated" case:
return fact(
$i-1, # Simplify the argument
$i*$j # Pass my current state down
); # And call myself with the simpler argument and the internal state.
}
}
# Test it: This should return 5!=120
echo factorial(5);