1. 程式人生 > >Java青蛙跳臺階問題(一次可以跳n階)

Java青蛙跳臺階問題(一次可以跳n階)

一、問題

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,結果正確!

三、總結

以上只是從遞迴的方式給出的解決思路。方法不唯一,以後有機會進行更深的研究和探討。