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 @   陈晓猛  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-03-05 python报错“IndentationError: unexpected indent“的两三解决方法
2019-03-05 【TCP协议】MTU和MSS详解
2019-03-05 【AppScan】入门工作原理详解
点击右上角即可分享
微信分享提示