Java青蛙跳臺階問題(一次可以跳n階)
阿新 • • 發佈:2018-12-16
一、問題
1、初級版
一隻青蛙跳臺階,一次可以跳1階,可以2階。那麼,臺階為n時,有多少種跳法。
2、升級版
一隻青蛙跳臺階,一次可以跳1階,可以2階,其能力足夠強大以至於一次可以跳n階。那麼,臺階為n時,有多少種跳法。
二、思路與程式碼
1、第一種情況(初級版)
一次只能挑一階或者兩階時。如果只有1階,那麼一共有1種跳法; 如果有2階,那麼一共有2種跳法。如果有n階時,最後一步青蛙只能從第n-1或者n-2這兩種情況往上跳。 那麼,假設n階時有f(n)種跳法,由上可知:
f(1) = 1
f(2) = 2
f(n) = f(n-1) + f(n-2)
2、所以初級版Java程式碼如下
public static void main(String[] args) { int a = 5; System.out.println(qingwa(a)); } private static int qingwa(int a) { if (a == 1) { return 1; } else if (a == 2) { return 2; }else { return qingwa(a - 1) + qingwa(a - 2); } }
如果有5階時,輸出結果為8:
D:\java\jdk8\bin\java
8
Process finished with exit code 0
3、第二種情況(升級版)
升級版的青蛙具有超凡的能力,問題也更加複雜。 假設一共有n階,同樣共有f(n)種跳法,那麼這種情況就比較多,最後一步超級蛙可以從n-1階往上跳,也可以n-2階,也可以n-3…等等等,一次類推。 所以,可知:
式1:
f(n) = f(n-1) + f(n-2) + ... + f(2) + f(1)
而且,容易得出:
式2:
f(n-1) = f(n-2) + f(n-3) + ... + f(2) + f(1)
將式1中的f(n-2) + f(n-3) + … + f(2) + f(1) 替換成式2,可知:
f(n) = f(n-1) + f(n-1) = 2 * f(n-1)
3、所以升級版Java程式碼如下
public static void main(String[] args) {
int a = 3;
System.out.println(qingwa(a));
}
private static int qingwa(int a) {
if (a == 1) {
return 1;
} else {
return 2 * qingwa(a - 1);
}
}
如果有3階時,輸出結果為4,結果正確!
三、總結
以上只是從遞迴的方式給出的解決思路。方法不唯一,以後有機會進行更深的研究和探討。