计算机程序的构造和解释>1构造过程抽象>1.2过程与它们所产生的计算

线性递归:

function factorial(n){
    return n==1 ? 1 : n*factorial(n-1);
}

 

线性迭代:

function factorial(n){
    return fact_iter(1,1,n);
}
function fact_iter(product, counter, max_count){
    return counter > max_count ? product :
            fact_iter((counter * product), (counter + 1), max_count);
}

线性递归的计算过程形状,是先扩张后收缩状。解释器还要保存,线性递归的计算步骤。

线性迭代保存计算结果,无需解释期保存计算步骤。

所以,速度上,线性迭代占优势。但,理解上,线性递归,占优势。

 

树形递归:

function fib(n){
    return n== 0 ? 0 : n==1 ? 1 : 
    fib(n- 1)+fib(n- 2);
}

 

算法的时间与空间,估算。

posted @ 2012-04-22 14:45  草珊瑚  阅读(260)  评论(0编辑  收藏  举报