《劍指offer》編程-斐波那契數列/青蛙跳臺階
#情景:一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)/ 斐波那契數列問題
斐波那契數列遞推公式:
f(0)=0 f(1)=1; f(2)=f(0)+f(1) ; f(3)=f(2)+f(1) ;.....;即f(n)=f(n-1)+f(n-2)
#分析:青蛙跳臺階問題其實就是 斐波那契數列,對於青蛙來說,可以一步跳一個,也可以一步跳兩個。需要問n級的臺階有多少種跳法排列,即逐步遞推爲若最後一次跳了一下,即n-1級的臺階有多少種跳法加上若最後一次跳了兩下,即n-2級的臺階有多少種跳法,最後依次遞推。即對於三個臺階來說,最後一步跳一下,即f(2),最後一步跳兩下,即f(1), 即f(3)=f(2)+f(1)。
因此此問題的模型則爲斐波那契數列。
斐波那契數列的解決方法有兩種 1.遞歸實現 (可理解 程序效率低 大數無法計算)2.迭代消除遞歸(程序效率高,可以計算大數)
#Java
1.遞歸實現
public int Fib(int n)
{
if(n<=0)
return 0;
if(n==1||n==2)
return 1;
return Fib(n-1)+Fib(n-2);
}
2.迭代實現
public int Fibonacci(int n) {
int num=0;
if(n<=0)
return 0;
if(n==1||n==2)
{
return 1;
}
int fir=1,sec=1;
for(int i=3;i<n;i++)
{
num=fir+sec;
fir=sec;
sec=num;
}
return num;
}