N階樓梯上樓問題:一次可以走兩階或一階,問有多少種上樓方式

題目描述:
N階樓梯上樓問題:一次可以走兩階或一階,問有多少種上樓方式。

輸入:
輸入包括一個整數N。

輸出:
可能有多組測試數據,對於每組數據,
輸出當樓梯階數是N時的上樓方式個數。

樣例輸入:
4
樣例輸出:
5

思路一:設有x次走一階,y次走兩階,則一定滿足x+2*y=n,且x、y均爲整數,那麼對於任何一個滿足的x的可能走法共有
C(x+(n-x)/2,x)種走法,即從數x+(n-x)/2中取x種組合,值爲(x+(n-x)/2)的階乘除以x的階乘與(n-x)/2的階乘的乘積。
依次取可能的x值,然後相加每一種的可能情況就可以了。
思路二:走到第n階時可能是從第n-1階走一步到的,也可能是從n-2階走兩階到的,設F(n)爲走到n階的種數,則F(n)=F(n-1)+F(n-2)。當n=1時,F(1)=1,n=2時,F(2)=2,這是一個動態規劃問題。其實就是一個斐波那契數列。

public class CrawFloor {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("Please input number of the floor:");
		int num = scan.nextInt();
		System.out.println("一共有" + fic(num) + "種走法!");
		scan.close();
	}
	public static int fic(int n){
		if(n == 1 || n == 2){
			return n;
		}else if(n > 2){
			return fic(n - 1) + fic(n - 2);
		}else{
			return -1;  //輸入n非法
		}
	}

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