《劍指offer》編程-斐波那契數列/青蛙跳臺階問題

《劍指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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章