php
function fact($n) {
if($n == 0)
{
return 1;
} else
{
return $n * fact($n - 1);
}
}
var_dump(fact(5));
要理解递归,先要知道一堆栈(栈)的知识。
栈是一个后进先出的压入(push)和弹出(pop)的数据结构。递归的实现,是因为函数的每个执行过程都在栈里有自己的形参和局部变量的备份,这个备份和函数的其他等等过程毫不相干。这种机制是大多数程序设计语言实现子程序结构的基础。
程序trace
0.0731 120296 +16 -> fact($n = 5)
0.0733 120328 +32 -> fact($n = 4)
0.0735 120360 +32 -> fact($n = 3)
0.0736 120392 +32 -> fact($n = 2)
0.0738 120424 +32 -> fact($n = 1)
0.0739 120456 +32 -> fact($n = 0)
0.0740 120488 >=> 1
0.0742 120456 >=> 1
0.0750 120424 >=> 2
0.0753 120392 >=> 6
0.0754 120360 >=> 24
0.0756 120328 >=> 120
0.0757 120328 -128 -> var_dump(120)
Java
class Fact
{
public static void main(String[] args)
{
System.out.println(fact(6));
}
public static int fact(int n){
if (n == 0)
{
return 1;
} else {
return n*fact(n-1);
}
}
}