计算机程序的构造和解释>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);
}

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


合乎自然而生生不息。。。
原文地址:https://www.cnblogs.com/samwu/p/2464968.html