news 2026/7/28 17:13:46

【剑指Offer】斐波那契数列之青蛙跳台阶

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【剑指Offer】斐波那契数列之青蛙跳台阶

题目

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

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

分析

分析问题一:

将跳法总数记为f(n),可以知道f(1)=1,f(2)=2。当n>2时,第一次跳1级的话,还有f(n-1)种跳法;第一次跳2级的话,还有f(n-2)种跳法,所以可以推得f(n)=f(n-1)+f(n-2),即为斐波那契数列。所以,用斐波那契的解法来解即可。

分析问题二:

解法一:

当n=1时,f(1)=1。

当n大于1时,归纳总结可知:跳上n级台阶,第一次跳1级的话,有f(n-1)种方法;第一次跳2级的话,有f(n-2)种方法……第一次跳n-1级的话,有f(1)种方法;直接跳n级的话,有1种方法,所以可以得到如下公式:

f(n) = f(n-1)+f(n-2)+......f(1)+1 (n≥2)

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

由上面两式相减可得,f(n)-f(n-1)=f(n-1),即f(n) = 2*f(n-1) (n>2)

最终结合f(1)和f(2),可以推得:f(n)=2^(n-1)

解法二:除了最后一个台阶外,其余的木板都有存在和不存在两种可能性,所以n-1块木板有2^(n-1)种跳法。

代码

package com.Fibonacci; //青蛙跳台阶的2种方式 public class FrogJump { public static int FrogJump1(int n){ if(n < 0){ return 0; } if(n == 1){ return 1; } return FrogJump1(n-1) + FrogJump1(n-2); } public static int FrogJump2(int n){ if(n < 0){ return 0; } if(n == 0){ return 1; } if(n == 1){ return 1; } int prePre = 0; int pre = 1; int result = 1; for(int i = 2; i <= n; i++){ result = prePre + pre; prePre = pre; pre = result; } return result; } public static void main(String[] args){ System.out.println(FrogJump2(3)); System.out.println(FrogJump2(4)); } }
package com.Fibonacci; public class HardFrogJump { //递归 public static int HardFrogJump1(int n){ if(n <= 0){ return 0; } if(n == 1) { return 1; } return 2 * HardFrogJump1(n-1); } //迭代 public static int HardFrogJump2(int n){ if(n <= 0){ return 0; } if(n == 1){ return 1; } int pre = 1; int result = 2; for(int i = 2; i <= n; i++){ result = 2 * pre; pre = result; } return result; } public static void main(String[] args){ System.out.println(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 17:09:00

Flutter 工程构架设计(MVVM + Repository)

Flutter 工程构架设计&#xff08;MVVM Repository&#xff09; 在 Flutter 应用开发中&#xff0c;随着业务复杂度的提升&#xff0c;合理的工程架构设计显得尤为重要。MVVM&#xff08;Model-View-ViewModel&#xff09;结合 Repository 模式&#xff0c;能够有效分离关注点…

作者头像 李华
网站建设 2026/7/28 17:05:33

伊利亚·苏茨克维尔的SSI获得英伟达Vera Rubin平台访问权

安全超级智能公司&#xff08;Safe Superintelligence Inc.&#xff0c;简称SSI&#xff09;近日再度引发业界关注。这家致力于为全人类开发安全、合乎伦理的人工超级智能的前沿实验室&#xff0c;与英伟达达成了一项重要协议&#xff0c;将获得大量算力资源的使用权。 根据协议…

作者头像 李华
网站建设 2026/7/28 17:02:57

176、Sensor选型实战:从Datasheet参数到系统级性能评估的完整方法论

176、Sensor选型实战:从Datasheet参数到系统级性能评估的完整方法论 去年帮一个车载项目做Sensor选型,团队里新来的硬件工程师拿着OV某款Sensor的Datasheet,兴奋地跟我说“这颗芯片动态范围标称120dB,HDR能力绝对够用”。结果样机打出来,夜间隧道场景直接翻车——高光区域…

作者头像 李华
网站建设 2026/7/28 17:02:41

强化学习入门:蒙特卡洛与时序差分算法原理对比与应用选择

上周和一位做生物信息分析的朋友聊天&#xff0c;他提到一个很有意思的困境&#xff1a;手头有一堆蛋白质相互作用的预测任务&#xff0c;每个任务都像是一次“实验”——输入序列&#xff0c;模型给出一个相互作用的概率分数。他尝试用一些预训练模型&#xff0c;但效果时好时…

作者头像 李华
网站建设 2026/7/28 17:02:13

【剑指offer】4.3 具体让抽象问题具体化

面试题21&#xff1a;包含min函数的栈题目&#xff1a;定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中&#xff0c;调用min、push及pop的时间复杂度都是O(1)。解答&#xff1a;代码如下&#xff1a;stack<int> ValSta; stack…

作者头像 李华