青蛙跳台阶问题

C语言青蛙跳台阶问题 可以看到上面递归的方法进行了大量重复运算,当数值不太大的时候就会运算很久,因此可以使用非递归方法,避免大量重复计算,从而提高代码效率。,根据这个点可以通过简单画图来求出一个规律性,设青蛙要跳上n级台阶,设func(n)为跳上n级台阶的跳法。可以看出,当n>2时,循环进行n-2次,每一次循环结束,n–, 直到n-2=0跳出循环,返回结果。青蛙有两种跳法,一种是跳到一级台阶,一种是跳上二级台阶。题目中最关键的点是青蛙。 阅读详情

问题一: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:
1)一级台阶的时候有一种跳法,两级台阶的时候则有两种跳法,
2) n级台阶的时候,则有两种可能,一种是跳一级,然后剩下的有f(n-1)种跳法,或者跳两级,剩下的有f(n-2)种跳法
3)由以上思路我们很快就能够联想到递归,但是这道题用递归的话,空间复杂度太高。事实上这是一道斐波那契数列类似的题
(ps.提醒自己用的:猪脑袋,记住了,斐波那契数列输出最后一个结果的话,用三个变量就行了,别再用递归了)

public class Solution {
    //斐波那契数列数列问题
    /*
    public int JumpFloor(int target) {
        if(target<1)
            return 0;
        else if(target==1)
            return 1;
        else if(target==2)
            return 2;
        else
            return JumpFloor(target-1)+JumpFloor(target-2);
    }
    */
    public int JumpFloor(int target) {
        if(target<3)
            return target;
        int s=0;
        int f1=1,f2=2;
        for(int i=2;i<target;i++){
            s=f1+f2;
            f1=f2;
            f2=s;
        }
        return s;
    }
}

问题二:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
链接:https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387
来源:牛客网

关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:

f(1) = 1

f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。

f(3) = f(3-1) + f(3-2) + f(3-3)

…

f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(n-(n-1)) + f(n-n)

说明:

1)这里的f(n) 代表的是n个台阶有一次1,2,…n阶的 跳法数。

2)n = 1时,只有1种跳法,f(1) = 1

3) n = 2时,会有两个跳得方式,一次1阶或者2阶,这回归到了问题(1) ,f(2) = f(2-1) + f(2-2)

4) n = 3时,会有三种跳得方式,1阶、2阶、3阶,

那么就是第一次跳出1阶后面剩下:f(3-1);第一次跳出2阶,剩下f(3-2);第一次3阶,那么剩下f(3-3)

因此结论是f(3) = f(3-1)+f(3-2)+f(3-3)

5) n = n时,会有n中跳的方式,1阶、2阶…n阶,得出结论:

f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + ... + f(n-1)

6) 由以上已经是一种结论,但是为了简单,我们可以继续简化:

f(n-1) = f(0) + f(1)+f(2)+f(3) + ... + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2)

f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2) + f(n-1) = f(n-1) + f(n-1)

可以得出:

f(n) = 2*f(n-1)

7) 得出最终结论,在n阶台阶,一次有1、2、…n阶的跳的方式时,总得跳法为:

           | 1        ,(n=0 ) 
f(n) =     | 1        ,(n=1 )
           | 2*f(n-1) ,(n>=2)
public class Solution {
    public int JumpFloorII(int target) {
        if(target<1)
            return 0;
        else if(target==1)
            return 1;
        else{
            return 2*JumpFloorII(target-1);
        }
    }
}

类似问题:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
链接:https://blog.youkuaiyun.com/ListentTome/article/details/79846202

青蛙跳台阶问题 C++ 问题描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:2 示例 2: 输入:n = 7 输出:21 提示: 0 <= n <= 100 题解: 我们可以计算前面几个数字发现规律,n = 1时... 阅读详情

相关推荐

青蛙跳台阶问题及尾递归优化方法

目录 问题一 了解递归和迭代 了解尾递归 如何将普通递归优化为尾递归? 有关递归和尾递归优化的文章可以参考 其它尾递归优化参考 问题二 尾递归的练习: 问题一 现有n阶台阶,有一只青蛙要从台阶底跳上台阶顶。这只青蛙每次可以跳一阶,也可以跳两阶。问这只青蛙有多少种跳法可以完成目标? 分析:这种问题可以先从简单情况着手,记总共有jump(n)种方法。 当n=1时,jump(1)...

麦子的博客 2159

经典算法----青蛙跳台阶问题(斐波那契数列)——动态规划基本思想

经典算法----青蛙跳台阶问题(斐波那契数列)——动态规划基本思想

qq_63650289的博客 585

2023东华大学OJ机试题22-70

东华大学计算机考研复试机试22 约瑟夫环223、整除的尾数24、回文质数25、汽水瓶26、阶乘最后的非0位27、算菜价28、 水果价格29、求奇数的乘积30、求最晚和最早日期31、素数32、计算e33 数字之和34 繁殖问题35 奇妙的数字36 整除的尾数37 黑色星期五38 树39 约瑟夫环40 最大与最小41 环42 求数列项43 最高频率44 三艘船45 回文数46 特殊四位数47 最大值48 数列149 修理牛棚50 按要求输出序列51 部落人乘法52 序列53 双重回文数54 等差数列55 人见人

m0_49263811的博客 2598

剑指 Offer 10- II. 青蛙跳台阶问题

题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 看题解后 class Solution { public int numWays(int n) { if(n==0||n==1){ return 1; } // 两个变量表示前两项 int pre =

不会飞的王 428

Howland电流源电路:从理论到实践的深度解析与优化策略

本文深度解析了Howland电流源电路的工作原理,从经典四电阻架构的“虚短”“虚断”分析,到其实现宽带恒流输出的理论优势。重点剖析了实践中因电阻精度、运放参数及PCB布局导致的性能瓶颈,并提供了引入第五电阻、优化运放选型等关键优化策略,旨在将输出阻抗从kΩ级提升至MΩ级,以满足精密测量与传感器驱动等应用需求。

weixin_29243063的博客 442

【STM32】从零构建串口IAP框架:BootLoader与App双向跳转实战解析

本文详细解析了STM32串口IAP框架的构建,重点阐述了BootLoader与App双向跳转的实战原理与实现步骤。内容涵盖Flash分区规划、中断向量表重定向、通信协议设计及固件升级流程,并针对跳转失败、程序跑飞等常见问题提供了解决方案,帮助开发者掌握产品级远程升级的核心技术。

wind6的博客 838

算法题/青蛙跳台阶问题

python2.7问题一:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 f(n) = f(n-1)= 1 n=1 f(n) = 1+1 = 2 n=2 当第一次跳一个台阶时,有一种方法,当第一次跳两个台阶时有一种方法 f(n) = 2+1 =3 n=3 当第一次跳一个台阶时有f(3-1)中方法,当第一次跳两个台阶时有f(3-2)中方法 因

szj_huhu的博客 1万+

深入解析Gerber RS274X文件格式:从基础语法到实战应用

本文深入解析PCB制造的核心标准Gerber RS274X文件格式,详细介绍了其基础语法、坐标系统、功能码以及嵌入式光圈定义等关键特性。通过实战案例演示了如何解析和手写Gerber指令,并总结了常见错误与调试技巧,帮助PCB工程师掌握这一与制造工厂沟通的“通用语言”,确保设计准确无误地转化为实体电路板。

weixin_29252171的博客 94

递归解决青蛙跳台阶问题(斐波那契数列)

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法? 答题思路 如果只有1级台阶,那只有一种跳法 如果有2级台阶,那么就有2种跳法,一种是分2次跳。每次跳1级,另一种就是一次跳2级 如果台阶级数大于2,设为n的话,这时我们把n级台阶时的跳法看成n的函数,记为,第一次跳的时候有2种不同的选择:一是第一次跳一级,此时跳法的数目等于后面剩下的n-1级台阶的跳法数目,即为,二是第一次跳二级,此时跳法的数目等于后面剩下的n-2级台阶的跳法数目,即为,因此n级台阶的不同跳

weixin_45796387的博客 801

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 798

YOLOv11改进 - 卷积Conv | SPD-Conv空间深度转换卷积优化空间信息编码,攻克小目标检测难题

本文介绍了一种名为SPD-Conv的新型CNN构建块及其在YOLOv11中的结合。传统CNN在处理低分辨率图像或小物体时,因使用步长卷积和池化层导致细粒度信息丢失、性能下降。SPD-Conv由空间到深度(SPD)层和非步长卷积(Conv)层组成,完全消除卷积步长和池化层,避免信息损失。SPD层重排特征图元素将空间信息转换到深度维度,非步长卷积层进一步处理特征图。我们将SPD-Conv集成进YOLOv11,实验证明其在低分辨率图像和小物体检测任务上显著优于现有模型。

魔改工程师的博客 1141

详解青蛙跳台阶的递归问题

青蛙跳台阶递归问题的解释与延申 题意说明 一只青蛙可以一次跳 1 级台阶或一次跳 2 级台阶,例如:跳上第一级台阶只有一种跳法:直接跳 1 级即可。跳上两级台阶,有两种跳法: 每次跳 1 级,跳两次; 或者一次跳 2 级.问要跳上第 n 级台阶有多少种跳法? 解题思路 我们设台阶数位N; 当N=1时,当然只有1种跳法; 当N=2时,青蛙可以跳2次1层和跳1次2层; 当N=3时,当有3层台阶时,青蛙可以选择先跳1层,剩下2层台阶,所以此时就是有2层台阶时的跳法,有2种;当青蛙选择第一次跳2层台阶时,剩下1层台

Pinksatrfish的博客 8965

LLC 谐振变换器开发设计1

本文档详细介绍了基于DSP28335的LLC谐振变换器开发设计。系统采用频率调制(FM)控制方式,实现高效率、高功率密度的隔离型DC/DC变换。文档阐述了LLC拓扑结构和工作原理,给出了谐振频率、品质因数等关键参数的计算公式。硬件设计包括功率器件选型和采样电路实现,软件部分提供了DSP28335的核心控制算法和代码示例,涵盖频率转换、PI控制和PWM生成。系统还设计了启动策略和保护机制,确保可靠运行。该设计实现了主开关零电压开通和低纹波输出特性。

331

青蛙跳台阶及汉诺塔问题

青蛙跳台阶;汉诺塔问题

zzh_Zao的博客 1410

Android 中 app freezer 原理详解(二):S 版本

在之前的两篇博文《Android 中app内存回收优化(一)》和《Android 中app内存回收优化(二)》中详细剖析了 Android 中 app 内存优化的流程。这个机制的管理通过 CachedAppOptimizer 类管理,为什么叫这个名字,而不叫 AppCompact 等?freezer,一个针对应用进程长期处于 Cached 状态的优化。在之前博文《app freezer 原理 R 版本》

私房菜 3610

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java青蛙跳台阶问题

           我不仅会呱 我还会跳!我是。。。 青蛙跳台阶问题描述解决思路实现代码 问题描述 一只青蛙一次可以跳上1级台阶,也可以一次跳上2级台阶,请问跳上n级台阶,该请娃一共有多少种跳法? 解决思路 ①如果只有1级台阶,那显然只有一种跳法。 ②如果有2级台阶,那么就有2种跳法,一种是分2次跳。每次跳1级,另一种就是一次跳2级。 ③如果台阶级数大于2,设为n的话,这时我们把n级台阶时的跳法看成n的函数,记为,第一次跳的时候有2种不同的选择:一是第一次跳一级,此时跳法的数目等于后面剩下的n-1级台阶.

unstoppable_t的博客 1423

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

递归—青蛙跳台阶问题

目录 题意说明(前言) 一、思路 二、代码 三、拓展 总结 前言: 一只青蛙可以一次跳 1 级台阶或一次跳 2 级台阶,例如:跳上第一级台阶只有一种跳法:直接跳 1 级即可。跳上两级台阶,有两种跳法: 每次跳 1 级,跳两次; 或者一次跳 2 级.问要跳上第 n 级台阶有多少种跳法? 一、思路: 递归通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量; 根据递

m0_57732810的博客 3166

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【C语言】青蛙跳台阶问题、汉诺塔问题

【C语言】青蛙跳台阶问题、汉诺塔问题,本文章介绍了,使用C语言解决青蛙跳台阶问题与汉诺塔移动问题

XJ2536877903的博客 1346

递归经典问题:青蛙跳台阶和汉诺塔问题

假设有n个台阶,青蛙每次跳跃可跳过一个或两个台阶,要使青蛙跳到最上面,有多少种跳法?

2302_80372340的博客 1399

算法—青蛙跳台阶问题汇总

1. 第一题(引子):输出菲波那切数列的第N项。 斐波那契数列含义(百度百科): 指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*) 递归方式: public static int fibnacci(int n){ ...

zhangshk_的博客 2万+

递归详解之青蛙跳台阶和汉诺塔问题

与其向往,不如行动

X_do_myself的博客 1221

走进递归经典——青蛙跳台阶问题详解

目录传统艺能????过渡区????正片开始????描述????分析????实现????格局打开???? 传统艺能???? 小编是大一菜鸟不赘述,欢迎大佬指点江山(QQ:1319365055) 此前博客点我!点我!请搜索博主 【知晓天空之蓝】点我!点我!请搜索博主 【知晓天空之蓝】或扫码进入! 乔乔的gitee代码库(打灰人 )欢迎访问,点我! (https://blog.51cto.com)感谢支持! 过渡区???? 现在是北京时间13:03,只有下午有节英语课,昨晚看递归的题看到一点过, 所以早上起来精

qq_61500888的博客 2153

递归思想的深度理解——汉诺塔问题和青蛙跳台阶问题

通过青蛙跳台阶和汉诺塔这两个问题,深度理解递归思想

2301_80309505的博客 1473

汉诺塔以及青蛙跳台阶问题

汉诺塔问题 问题描述: 有三只柱子A、B、C,柱子A上有n个盘子,这n个盘子越往下越大,现要求把盘子挪到C上,一次只能挪一个,并且小的必须在上边。 解题思路: 先假设塔座是排成一个三角形,A–>B–>C–>A,形成一个顺时针的圆盘,在移动圆盘的时候,如果是奇数次移动(第1、3、5…次),那么就把最小的圆盘移动到顺时针方向的下一个塔座上;如果是偶数次移动(第2、4、6…次),则保...

weixin_42528742的博客 472
上一篇: 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
下一篇: 棋盘上礼物价值最大化问题
ListentTome
博客等级 码龄9年 3粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值