阶乘递归算法

来源:互联网 发布:网络营销软件站 编辑:程序博客网 时间:2024/06/04 08:58

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);             }       }}
1 0