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)

 

posted @ 2022-03-05 16:36  陈晓猛  阅读(99)  评论(0编辑  收藏  举报