计算机程序的构造和解释>1构造过程抽象>1.2过程与它们所产生的计算
线性递归:
function factorial(n){
return n==1 ? 1 : n*factorial(n-1);
}
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);
}
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);
}
return n== 0 ? 0 : n==1 ? 1 :
fib(n- 1)+fib(n- 2);
}
算法的时间与空间,估算。
合乎自然而生生不息。。。