菲波那契數(shù)列:1,1,2,3,5,8,13,21,34,55,89,144,...
求第n個(gè)斐波那契數(shù)列
JavaScript版:
function fib(n){
if(n==1||n==2){
return 1;
}
else{
return fib(n-2)+fib(n-1);
}
}
C#版:
int fib(int n)
{
if(n==1||n==2)
{
return 1;
}
return fib(n-2)+fib(n-1);
}
都是使用的遞歸方法進(jìn)行計(jì)算的赋兵,每次使用遞歸的時(shí)候都要記住一句話:
任何遞歸都可以用迭代進(jìn)行替換
其實(shí)就是以犧牲空間效率為代價(jià)換取更高的時(shí)間效率。
迭代實(shí)現(xiàn):
JavaScript版
function f(n){
if(n==1||n==2){
return 1;
}
else{
var pre_pre_result=1;
var pre_result=1;
var result=0;
for(var i=0;i<n-2;i++){
result=pre_pre_result+pre_result;
pre_pre_result=pre_result;
pre_result=result;
}
return result;
}
}
C#版類似挺举,就不贅述了萍肆。
話說(shuō)笼沥,求楊輝三角第n行第m列的數(shù)也用到了遞歸朴恳,可是我不知道要怎么改成迭代们陆,求高手指點(diǎn)一二。
另粥血,2015年我寫的一篇舊文