1. 程式人生 > 其它 >JZ71青蛙跳臺階擴充套件問題(斐波那契數列問題)

JZ71青蛙跳臺階擴充套件問題(斐波那契數列問題)

《劍指offer》面試題10(關於青蛙跳臺階之斐波那契數列)擴充套件問題:
我們知道,當青蛙一次只能跳一階或者兩階的時候,我們可以把問題轉換為斐波那契數列用遞迴或者非遞迴的形式予以計算,但是,若青蛙一次能跳的階數在n階以內(包括n階)時,又該如何計算呢?

題目:
在青蛙跳臺階的問題中,如果把條件改成:一隻青蛙一次可以跳上1級臺階,也可以跳上2級…也可以跳上n級,此時該青蛙跳上一個n級的臺階總共有多少種跳法?

思路:
如果青蛙選擇第一次跳1階,那麼接下來最多隻能跳n-1階,也就最多能有n-1種跳法,如果青蛙選擇第一次跳2階,那麼接下來最多隻能跳n-2階,也就最多能有n-2種跳法,…,依次類推如果青蛙選擇第一次跳n-1階,那麼接下來最多隻能跳1階,也就最多能有1種跳法,所以,設該青蛙跳上一個n級的臺階總共有f(n)種跳法,則f(n)= f(n-1)+ f(n-2)+ f(n-3)+ … + f(1)。而f(n-1)= f(n-2)+ f(n-3)+ f(n-4)+…+ f(1)。兩式相減得f(n)= 2 * f(n-1)= 2 * 2 * f(n-2)=2 * 2 * 2 * f(n-3)=…=2^(n-1) * f(n-(n-1)) = 2^(n-1) * f(1)= 2^(n-1),程式碼如下:

Java解題:

/**
     * 青蛙能跳n階以內
     * @param args
     */
    public int Fibonacci2(int n){
        
        if(n==0)
            return 0;
        
        /*if(n==1)
            return 1;*/
        //2*Fibornacci2(n-1)
        return (int) Math.pow(2,n-1);
    }

Python解題:

class Solution:
    def jumpFloorII(self , number: 
int) -> int: return 2**(number-1)
宣告 歡迎轉載,但請保留文章原始出處:) 部落格園:https://www.cnblogs.com/chenxiaomeng/ 如出現轉載未宣告 將追究法律責任~謝謝合作