当前位置: 首页 > news >正文

青蛙跳台阶用函数的递归解决

问题

一只青蛙想要跳到第n级台阶(n为非负整数)。它每次只能跳1 级2 级台阶,问这只青蛙跳到第n级台阶共有多少种不同的跳法?

举例

首先我们先从简单的开始分析:

当n=1时;青蛙只有一种跳法:就是跳一级台阶;

当n=2时;青蛙只有两种跳法:1.一次跳一级台阶,共跳两次;2.一次跳两级台阶,共跳一次;

当n=3时;青蛙有三种跳法:1.一次跳一级台阶,共跳三次;2.第一次跳两级台阶第二次跳一级台阶,共跳两次;3.第一次跳一级台阶第二次跳两级台阶,共跳两次;

当n=4时;青蛙有五种跳法:1.一次跳一级台阶,共跳4次;2.第一次跳一级台阶第二次跳两级台阶第三次跳一级台阶,共跳三次;3.第一次跳一级台阶第二次跳一级台阶第三次跳两级台阶,共跳三次;4.第一次跳两级台阶第二次跳一级台阶第三次跳一级台阶;共跳三次;5.第一次跳两级台阶第二次跳两级台阶

......

我们看青蛙共有2种跳跃方式:一级或两级台阶;假设要跳跃的台阶为a级;每次跳跃后以跳跃到的台阶为起点发现剩余跳跃的台阶为a-1或a-2级,按照数学思想,a级的台阶跳跃数的种类为(a-1)与(a-2)的种类数之和。由此我们可以用函数的递归来解决这类问题。

代码验证

#include<stdio.h> int frog(int n) { if(n<=2){return n;} else return frog(n-1)+frog(n-2); } int main() { int a; printf("请输入青蛙要跳跃的台阶数:\n"); scanf("%d",&a); printf("青蛙跳跃%d级台阶共有%d种方法",a,frog(a)); return 0; }

扩展

那如果青蛙可以跳k级台阶呢(k ≤ n,即每次最多跳当前剩余台阶数)?

分析

由原问题分析可得,当k>n时,符合上述问题分析(即可将n级台阶分为k组,n级台阶的跳法=n-1与n-2与...n-k级台阶跳法之和)

代码验证

#include <stdio.h> long long frog(int n, int k) { long long recur(int m) { if (m == 0) { return 1; } long long sum = 0; for (int i = 1; i <= k && i <= m; i++) { sum += recur(m - i); } return sum; } return a(n); } int main() { int n, k; printf("请输入台阶数n(非负整数)和最大跳级k:"); scanf("%d %d", &n, &k); long long res = frog(n, k); printf("跳到第%d级台阶共有%lld种不同跳法\n", n, res) return 0; }

总结

青蛙跳台阶(1~k 级版)的本质是多阶递推的组合问题

  • 递归思路适合理解问题本质,嵌套函数实现符合语法要求,但需记忆化优化性能;
  • 动态规划是工程最优解,兼顾时间 / 空间效率;
  • 核心是抓住 “当前级跳法数 = 所有合法前序级跳法数之和” 的递推关系,同时做好边界过滤和数据类型适配。
http://www.gsyq.cn/news/100646.html

相关文章:

  • 智谱AI发布GLM-4.5V开源视觉模型,106B参数刷新多模态技术标杆
  • MarkText个性化配置终极指南:从零开始打造专属写作环境
  • B站视频下载工具的技术架构解析与实践应用
  • OpenKM 知识管理系统:企业文档管控的终极解决方案
  • 告别视频消失烦恼:MediaGo让你永久保存心仪内容
  • 3步搞定Zotero-GPT插件API密钥配置,开启智能文献管理新体验
  • 终极邮件查看工具:轻松处理多格式邮件的完整解决方案
  • Draw.io Mermaid插件终极指南:从零开始掌握文本转图表神器
  • Source Han Serif思源宋体:免费商用开源中文字体深度解析与应用指南
  • OpenKM文档管理系统:企业级部署与配置完全指南
  • 告别B站卡顿:PiliPlus让你的视频体验飞起来
  • 暗黑破坏神2存档编辑器:终极角色定制与装备管理完整指南
  • 37、谷歌网站使用全攻略:从搭建到优化
  • Windows右键菜单终极优化指南:ContextMenuManager让你的操作效率翻倍
  • 如何快速掌握WinFsp:虚拟文件系统的终极实战指南
  • 39、谷歌地图与谷歌即时通讯工具使用指南
  • 手机变专业摄像头:DroidCam OBS插件深度使用手册
  • 40、谷歌应用使用指南:Google Talk与Blogger全面解析
  • Mermaid在线编辑器终极指南:从技术小白到图表高手的快速通道
  • Mac百度网盘下载加速终极指南:3步解锁SVIP级极速体验
  • vue基于Spring Boot的球迷用品销售商城定制网站的应用和研究_2336x4jh
  • vue基于Spring Boot的社会志愿者管理系统_62w6613j
  • Java毕设项目:基于SpringBoot护肤品商城系统的设计与实现基于springboot护肤品推荐系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • Umi-OCR引擎架构深度解析:如何实现高效多引擎支持
  • vue基于Spring Boot的社区养老监护系统的应用和研究_7oi6bff0
  • openMES开源制造执行系统:快速构建数字化工厂的完整解决方案
  • 零基础玩转YOLOv11:3分钟掌握图像分割标注转换技巧
  • 代码补全模型参数配置陷阱:max_tokens过度设置引发冗余生成问题深度解析
  • ArkLights明日方舟速通神器:如何快速提升游戏效率的终极指南
  • FF14插件自动跳过副本动画文章仿写prompt