您的位置:首页 > 其它

阶乘递归算法

2016-10-25 10:20 267 查看
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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归 阶乘