青蛙跳台阶进阶版证明和代码

简介: 青蛙跳台阶进阶版证明和代码

1、背景

最近在看《剑指offer(第二版)》时,Fibonacci数列一节中提到了青蛙跳台阶的进阶版,问题描述为:一只青蛙一次可以跳上1级台阶,2级台阶…,也可以跳上n级台阶,问青蛙跳上n级台阶共有多少中跳法?书中提到了用数学归纳法可以证明跳的方法有 f(n)=2n−1种,本人杠精非要运用高中知识给其证明一下子,然后再给出求解代码。




2、简单的数学归纳法证明


其实这东西证明很简单,只是大家可能忘记高中的知识了,下面给出数学归纳法证明。首先分析一下跳上n级台阶的方法数 f ( n ) f(n) f(n)的表达式应该为:

image.png


简要分析一下上式:因为青蛙如果先跳1级台阶,则剩余跳法为 f(n−1);若先跳2级台阶,则剩余跳法为f(n−2);以此类推,到先跳n级台阶,则剩余跳法为 f(0),注意一下此处 f(0)==f(1)==1。


获得上式之后就可以开始推导了,首先进行移项处理:


f(n)f(n1)=f(n2)+...+f(1)+f(0)


然后我们可以惊奇的发现等号右端项就是 f(n−1),因此我们可以得到下式:


f(n)f(n1)=f(n1)f(n)=2f(n1)


,然后下面就可以开始高中数学题了,嘿嘿嘿。


f(n)=2f(n1)f(n1)=2f(n2)f(n2)=2f(n3)......f(2)=2f(1)f(1)=1f(0)


到这里可能大家就明白了,把所有的等式进行累乘,之后因为  f(0)==f(1)==1,所以只有n−1个2相乘,最终得到: f ( n ) = 2 n − 1


3、求解代码


就是把上述表达式进行代码化就行咯,有点侮辱智商的意思。

long long FrogJump(int n)
{
  return (long long)pow(2, n-1);
}



相关文章
|
6月前
|
存储 算法 JavaScript
递归的递归之书:引言到第四章
递归的递归之书:引言到第四章
187 0
|
5月前
|
存储
初阶编程题积累(3)——最接近的三数之和(题目描述、示例、题目思路、题解、解析)
初阶编程题积累(3)——最接近的三数之和(题目描述、示例、题目思路、题解、解析)
32 0
|
6月前
|
机器学习/深度学习 算法 测试技术
青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”(二)
这篇内容是关于解题策略的,主要介绍了在面对应用题时可以采用的“三板斧”方法:举例、模拟和找规律。通过一个走楼梯的例子详细解释了这三个步骤如何运用。首先,举例将抽象问题具体化,比如走5级台阶有几种方式。其次,通过模拟不同情况,例如思考走每一步的可能,发现递归或循环的模式。最后,通过找规律归纳出一般性的解决方案,这里发现走台阶问题与斐波那契数列相关。文章还提到了一个拓展案例——矩形覆盖问题,同样可以用类似的方法分析。总的来说,文章强调了解题过程中理解和转化问题的重要性,以及通过训练提升这方面能力。
51 0
|
6月前
|
C语言
青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”(一)
这篇内容介绍了C语言学习中的经典例题——斐波那契数列,强调了解题思路的重要性。斐波那契数列是一个数列,其中每个数是前两个数的和。文章指出,很多类似题目,如“青蛙跳台阶”,实质上都在考察斐波那契数列的实现。文中提供了斐波那契数列的定义、代码实现和递归与非递归的思路,并鼓励读者从问题中分析出解题模型,而非直接套用已知方法。此外,还提及了一道相关题目“矩形覆盖问题”,以供进一步练习。
47 0
|
6月前
|
测试技术
【一刷《剑指Offer》】面试题 9:斐波那契数列(扩展:青蛙跳台阶、矩阵覆盖)
【一刷《剑指Offer》】面试题 9:斐波那契数列(扩展:青蛙跳台阶、矩阵覆盖)
|
算法
【AcWing算法基础课】第五章 动态规划(未完待续)(1)
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且 总价值最大 。
62 0
【AcWing算法基础课】第五章 动态规划(未完待续)(1)
|
人工智能 算法 JavaScript
【AcWing算法基础课】第五章 动态规划(未完待续)(2)
给定一个如下图所示的数字三角形,从 顶部 出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点, 一直走到底层 ,要求找出一条路径,使 路径上的数字的和最大。
63 0
|
机器学习/深度学习 算法 JavaScript
【算法日记】快速幂:关于我知道答案却做不出来这档事
LeetCode第330场周赛,直接卡在了第二题😭,掉大分,学到一手快速幂。本文包含以下内容:快速幂,快速幂取余。
161 0
代码随想录刷题|回溯算法理论 LetCode 77.组合
代码随想录刷题|回溯算法理论 LetCode 77.组合
代码随想录刷题|回溯算法理论 LetCode 77.组合