面試題10:斐波那契數列

題目一:求斐波那契數列的第n項。

寫一個函數,輸入n,求斐波那契數列的第n項,斐波那契數列的定義如下:n=0,f(n)=0;n=1,f(n)=1;n>1,f(n)=f(n-1)+f(n-2).

思路一:遞歸

解決一:

public class Test1 {
	public static void main(String[] args) {
		int num=findNum(3);
		System.out.println(num);
	}
	private static int findNum(int n) {
		if(n<=0){
			return 0;
		}
		if(n==1){
			return 1;
		}
		return findNum(n-1)+findNum(n-2);
	}
}

思路二:可以發現,遞歸的話會有很多重複的計算,很浪費時間。

解法二:

package question10;

public class Test1 {
	public static void main(String[] args) {
//		int num=findNum(3);
//		System.out.println(num);
		System.out.println(findNum2(10));
	}
	private static int findNum2(int n){
		int m1=0;
		int m2=1;
		if(n==0){
			return 0;
		}
		if(n==1){
			return 1;
		}
		for(int i=2;i<=n;i++){
			int temp=m1+m2;
			m1=m2;
			m2=temp;
		}
		return m2;
	}

}

 

題目二:青蛙跳臺階問題

一隻青蛙一次可以跳上1級臺階,也可以跳上2級臺階。求該青蛙跳上一個n級的臺階總共有多少種跳法。

思路:類似斐波那契數列,稍微不同的時,這個是f(1)=1;f(2)=2;f(n)=f(n-1)+f(n-2).

解法:

package question10;

public class Test2 {
	public static void main(String[] args) {
		System.out.println(findNum(4));
	}

	private static int findNum(int n) {
		if(n==1){
			return 1;
		}
		if(n==2){
			return 2;
		}
		int m1=1;
		int m2=2;
		for(int i=3;i<=n;i++){
			int temp=m1+m2;
			m1=m2;
			m2=temp;
		}
		return m2;
	}
}

 

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