解决青蛙跳台阶问题~

面试编程题-青蛙跳楼梯问题 在做题时遇到这个问题,查看了一些博客后,写下自己的理解 青蛙跳楼梯问题: 问题一:一只青蛙一次可以跳1级楼梯或者2级楼梯,一共有n级楼梯,问一共有多少种到达目的地的方法 根据问题可知: n=1,一共有1种方法 n=2,一共有2种方法 n=3,一共有3种方法 n=4,一共有5种方法 n=5,一共有8种方案 阅读详情

一 .问题概述

青蛙跳台阶问题,也称为青蛙过河或者上楼问题,是一个经典的递归和动态规划问题。

问:一只青蛙站在楼梯的最底层,它需要跳到最高层。每次跳跃,青蛙可以跳上1个或2个台阶。问青蛙跳上第n阶台阶总共有多少种不同的跳法。

这个问题的解题思路与裴波那契数列问题相似,可以用递归和动态规划方法解决。下面将分别介绍这两种方法。

二 .解题方法

1 .经典递归

运用递归时,咱们首先先把问题分析清楚。跳台阶时,无疑就两种方式,一次跳一个或者一次跳两个。由下图可知,当台阶数 n <= 2 时,跳跃方式就等于台阶数;如果台阶数 n >=2时,到达第n阶台阶的方法数是到达第n-1阶和第n-2阶台阶方法数的和。

递归公式可以表示为: f(n)=f(n−1)+f(n−2),而递归终止条件就是 :当 n递减到 <= 2

那么,分析完之后,咱们就可以动手写代码了,咱们用C来实现。

#include <stdio.h>

int climbStairs(int n) 
{
    if (n <= 2) 
{
        return n;
    }
    return climbStairs(n - 1) + climbStairs(n - 2);
}

int main() 
{
    int n = 0;
    printf("请输入台阶的数量: ");
    scanf("%d", &n);
    printf("跳跃%d个台阶的方式有%d种\n", n, climbStairs(n));
    return 0;
}

2 . 动态规划

动态规划是一种更高效的方法,它通过填充一个数组来避免重复计算。设dp[i]表示到达第i阶台阶的方法数,状态转移方程与递归方法相同: dp[i]=dp[i−1]+dp[i−2]

初始化:

  • dp[0] = 1,因为在第0阶台阶上无需跳跃。
  • dp[1] = 1,因为只有一种方法跳到第1阶台阶。

边界条件:当i > 1时,使用状态转移方程 dp[i]=dp[i−1]+dp[i−2]。

以下是使用C语言实现的动态规划函数:

#include <stdio.h>

int climbStairs(int n)
{
    if (n <= 1)
     {
        return 1;
    }
    int dp[n + 1];
    dp[0] = dp[1] = 1;
    for (int i = 2; i <= n; i++)
     {
        dp[i] = dp[i - 1] + dp[i - 2];
      }
    return dp[n];
}

int main() 
{
    int n;
    printf("请输入台阶的数量: ");
    scanf("%d", &n);
    printf("跳跃%d个台阶的方式有%d种\n", n, climbStairs(n));
    return 0;
}

三.总结

1. 递归方法:时间复杂度为O(2^n),因为每个问题被分解为两个子问题,导致问题规模迅速翻倍。空间复杂度为O(n),用于递归调用的栈空间。

2. 动态规划方法:时间复杂度为O(n),空间复杂度也为O(n),用于存储dp数组。

所以对于青蛙跳台阶问题,动态规划提供了一个更高效且易于理解的解决方案。通过避免重复计算,动态规划显著提高了算法的效率。

但值得注意的是,上述动态规划方法中,数组dp[n+1]表达式中使用了非常量,在有些编译环境可能会报错,解决方法就是把它重新定义成一个空间较大的数组来实现函数功能。

最后祝小伙伴们早日成为技术大牛~

共勉@

青蛙跳台阶问题——动态规划求解(Java实现) 青蛙跳台阶问题——动态规划求解(Java实现) 题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:2 示例 2: 输入:n = 7 输出:21 提示: 0 <= n <= 100 一道比... 阅读详情

相关推荐

电力现货市场出清机制与节点电价计算实战解析

本文深入解析了电力现货市场的出清机制,特别是节点边际电价的计算原理与实战应用。通过一个基于Matlab和IEEE30节点系统的完整案例,详细演示了如何利用最优潮流模型求解市场出清价格,并提取节点电价,揭示了电网阻塞如何影响实时电价的形成。

weixin_29061425的博客 954

详解青蛙跳台阶问题

文章目录文字表述图片表述 文字表述 首先,当只有一级台阶时,毫无疑问,只有一种跳法 其次,当有两级台阶时,就是两种跳法 那么,三级台阶时,应该两种情况 1、若青蛙先跳一级台阶,接下来就有两种跳法,要么一级一级地跳,要么直接就跳上两级 2.若青蛙先跳两级台阶,接下来只能在再跳一级台阶 所以当有三级台阶时,一共有3种跳法 那么,一共有4级台阶时,一共有多少种跳法呢? 我们不妨列举一下 1.青蛙先跳一级台阶,接下来他就会还有3级台阶要去跳,而这3级台阶不就是上面3级台阶的重复吗!所以此时一共有3种跳法 2.青蛙

m0_60354608的博客 1万+

Fluent 中多相流模型全面解析

3.颗粒或液滴在连续相中的运动:若关注颗粒或液滴在连续相中的运动轨迹、分布规律以及与连续相的相互作用,如喷雾干燥、气力输送等过程,Eulerian-Lagrangian 模型则是最佳选择。Eulerian-Eulerian 模型可以准确模拟气体在固体颗粒中的流动情况,包括颗粒的流化状态、气体与颗粒之间的传热传质过程,为气固流化床的优化设计和操作提供依据。通过该模型,可以了解混合器内不同位置的混合程度、颗粒的运动轨迹以及液固相间的相互作用,从而改进混合器的结构和操作条件,提高混合效率。

khhdp的博客 3087

每日算法——最全青蛙跳台阶算法问题

Java每日算法之——青蛙跳台阶

weixin_48622530的博客 5100

Python爬虫实战:用Selenium+ChromeDriver批量抓取政府网站政策文件(附完整代码)

本文详细介绍了使用Python的Selenium和ChromeDriver进行政府网站政策文件批量抓取的实战技巧。从环境配置、动态页面元素定位到分页机制破解和反爬虫策略,提供了完整的解决方案和代码示例,帮助开发者高效获取结构化政策数据。

weixin_42531710的博客 266

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度!

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度! (以YOLO26最新目标检测模型为基础,利用LSKNet替代Backbone)

2502_91881744的博客 212

【青蛙跳台阶问题 —— (三种算法)】

青蛙跳台阶问题 —— (三种算法)

qq_73900397的博客 1万+

【tio-websocket】15、学习tio的第1步—tio-study

tio-study 是用于学习 t-io 的示范工程,tio-study 是入门 t-io 最好的方式!tio-study 工程演示的是一个典型的 TCP 长连接应用工程,分为 server(服务端) 和 client(客户端) 工程,server 和 client 共用 common(公共模块) 工程

JACKAL 1万+

一只青蛙一次可以_青蛙跳台阶 递归步骤

:Author: Mr.Liu :Create: 2020/7/4 17:29 :Github: https://XXXXXXXX Copyright (c) 2020,Mr.Liu Group All Rights Reserved.题意说明:一只青蛙可以一次跳 1 级台阶或一次跳 2 级台阶,例如: 跳上第一级台阶只有一种跳法:直接跳 1 级即可. 跳上两级台阶,有两种跳法: 每次跳 1 级,...

weixin_33785828的博客 898

[QMT量化交易小白入门]-七十三、主力资金动向:板块与个股资金流数据API(量化python代码解析)

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1122

电子电器架构 --- OEM企标中规定ECU启动时间的目的

电子电器架构 --- OEM企标中规定ECU启动时间的目的

Soly_kun的博客 225

你是真的“C”——函数递归详解青蛙跳台阶

手把手教学——函数递归详解汉诺塔+青蛙跳台阶问题

小梦的博客 2672

5、快速入门

点击启动实例按钮,并设计一个business key,每个实例会有一个business key, 业务主键,也相当于一个流程实例唯一key,一般会与一次业务强相关,比如一个订单号 ,此处取为shopping_1;付款程序完成后会流转到物流发货任务,此时java工程的相应订阅会收到任务,并进入断点,且读到到toWhere变量。单击shopping可以进入实时流程图的执行图,此时流程流转到第一个任务,需要业务系统完成此任务,并通知引擎。添加类,分别订阅流程中的加入购物车任务和物流发货任务。

leyoliu的博客 3505

青蛙跳台阶与汉诺塔问题

hello,各位小伙伴们上次我们复习了C语言小tip之函数递归,这次我们来使用函数递归来完成青蛙跳台阶和汉诺塔问题!

2301_80886847的博客 657

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

青蛙跳台阶问题(C语言)

在一个迷雾笼罩的世界里,有一只神奇的青蛙。它面临着一系列看似平凡却暗藏奥秘的台阶。这只青蛙拥有独特的能力,每次跳跃,它既可以轻盈地跳上 1 级台阶,又能猛地一跃跳上 2 级台阶。 而现在,一个巨大的谜团摆在我们面前:这只神秘的青蛙跳上一个 n 级的台阶,到底会有多少种神秘莫测的跳法呢?这个问题仿佛隐藏在深深的迷雾之中,等待着我们去揭开那层神秘的面纱,探寻其中隐藏的规律和秘密......

2301_80029060的博客 1345

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

青蛙跳台阶问题的C语言代码实现

那么此时的可能情况=青蛙跳上两级台阶的可能情况。

xiwen_Sivan的博客 860

jre9下载 jdk9

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

汉诺塔问题以及青蛙跳台阶问题(函数递归思想的应用)

青蛙跳台阶,汉诺塔。

Rev_world的博客 1202

青蛙跳台阶问题详解 递归思想

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 示例1: 输入1 返回值1 示例2: 输入4 返回值5 思想: 经典递归问题 思路:跳n级台阶相当于n-1和n-2级台阶的和 原因:n级台阶就相当于n-1级再跳一次一阶的和n-2级再跳一次2阶的 public class Solution { public int JumpFloor(int n) { if (n == 1) return 1;

shassd的博客 3302

青蛙跳台阶问题(史上最详细)

青蛙跳台阶一 提出背景二 分析问题三 找到规律四 规律 一 提出背景 一只青蛙一次最少可以跳 1层 台阶,最多可以跳 2层 台阶,求:该青蛙跳上n 层 的台阶总共有多少种跳法? 二 分析问题 如上图分析: 一层台阶:1种跳法 两层台阶:2种跳法 三层台阶:3种跳法 四层台阶:5种跳法 … 那么我们可以列一个数列: 1 2 3 5 8 13 21 34… 对这些数字是不是很熟悉?没错,问题其实就是隐含了斐波那契数列的思想 三 找到规律 F(1) = 1,F(2) = 2 当 n

lfm1010123的博客 3452

C语言青蛙跳台阶详解

一文让你学会青蛙跳台阶问题

川子767的博客 987

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

由斐波那契额数列衍生出的递归经典案例——汉诺塔问题和青蛙跳台阶问题详解,思路简单有趣,还不快赶快来学一下??

qq_74455045的博客 598

青蛙跳台阶系列问题的引入,求解与进阶(C语言)

青蛙跳台阶系列问题的引入,求解与进阶(C语言)

雪殇若兮的博客 399

递归中两个经典的汉诺塔和青蛙跳台阶问题

目录汉诺塔什么是汉诺塔?递归实现汉诺塔问题青蛙跳台阶青蛙跳台阶问题简述递归实现青蛙跳台阶问题总结 汉诺塔 什么是汉诺塔? 相信大家对汉诺塔这个游戏不陌生吧,或多或少都玩过一些。 这是一种益智游戏,游戏规定要把一个柱子上的所有盘子移动到另一个柱子上,每次只能移动一块,且要保证每次移动过程中小盘子在大盘子上面。 递归实现汉诺塔问题 递归的思想就是大事化小。所以问题我们可以这样考虑 有三个柱子 分别是A B C 将A柱子上n个盘子借助B柱子移动到C柱子上 我们可以将这个问题转化为 将A柱子上n-1个盘.

weixin_58450087的博客 293

青蛙跳台阶问题

一、青蛙跳台阶不同难度的介绍 首先青蛙跳台阶大致分为三个难度模式,这个里边所谓的公式不要去背,建议将多项式列出来,自己化简就行了。下边一一介绍这三个版本: 1.初级版: 告诉给定的台阶数,并且题目交代:青蛙只能一次跳一个台阶或者青蛙跳两个台阶。这个题我们在简单的列举之后会发现台阶的高度和青蛙的跳法是有规律的(和斐波那契数列很相似,只是换掉了第二项,构成次序列的思路与斐波那契数列完全一样)。 下边是具体的代码(内部含有详细的思路和化简说明) // 1.简单的跳台阶:说给定一个n阶的台阶,青蛙一次只能挑一个或者

weixin_47252176的博客 1639

青蛙跳台阶

手把手教写青蛙跳台阶

GD_small_bit的博客 1092

函数递归:汉诺塔问题和青蛙跳台阶问题

本章是对于函数递归,经典的两题的解说

2501_91709575的博客 914
上一篇: 实现经典小游戏《扫雷》
下一篇: 操作符详解
知困勉行的Allen
博客等级 码龄3年 279粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值