2010.01.28 尾递归

 

    有些人也把尾递归叫做迭代,使用尾递归的函数最大的特点就是它的参数已经包括了整个计算过程的所有信息,因此可以对此进行优化。
    如下面的尾递归:
  call factorial (3) call fact (3 1) call fact (2 3) call fact (1 6) call fact (0 6) return 6 return 6 return 6 return 6 return 6 
    
    这个递归过程可以被优化为:
call factorial (3) replace arguments with (3 1), jump to "fact" replace arguments with (2 3), jump to "fact" replace arguments with (1 6), jump to "fact" replace arguments with (0 6), jump to "fact" return 6   
    经过这样的优化,既可以节省时间,又可以节省空间。
另外,线性递归(如阶乘)和树形递归(如斐波那契数)都可以转换为尾递归。
计算机内部的循环是如何实现的?
    对于这个问题,我现在的知识还没法给出一个明确的答案,但我觉得是根本上还是通过递归实现的。因为不确定性多项式不就是一个递归计算过程,所以我觉得计算机所实现的循环都是通过递归实现的。

 

你可能感兴趣的:(优化,2010)