当前位置: 首页 > 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.cnnetsun.cn/news/55996.html

相关文章:

  • OpenKM文档管理系统:企业级部署与配置完全指南
  • PiliPlus完整指南:解锁B站第三方客户端的10大隐藏功能
  • ExifToolGui终极指南:照片元数据管理完整教程
  • Draw.io Mermaid插件终极指南:从零开始掌握文本转图表神器
  • Easy-Scraper终极指南:零基础掌握网页数据采集技巧
  • 27、Google幻灯片文本操作与格式设置全攻略
  • 网易云音乐快速听歌神器:简单3步实现个性化推荐优化
  • 33、谷歌应用入门:日历与网站创建全攻略
  • MoeKoe Music如何成为二次元音乐爱好者的终极选择?5大核心优势解析
  • Android Studio中文界面完整教程:详细步骤解决英文界面困扰
  • 终极邮件查看工具:轻松处理多格式邮件的完整解决方案
  • AMD Ryzen处理器性能调优终极指南:解锁硬件潜能
  • 3步快速掌握Draw.io Mermaid插件:文本转图表的免费终极指南
  • OneMore终极指南:让OneNote变身全能知识管理神器
  • 从“内存溢出”到“稳定运行”——Spark OOM的终极解决方案
  • UKB_RAP生物医学数据分析平台完整使用教程
  • openMES开源制造执行系统:快速构建数字化工厂的完整解决方案
  • FF14插件自动跳过副本动画文章仿写prompt
  • OpenBoardView:免费开源电路板查看工具的完整使用指南
  • 22、绿色物联网与移动云计算融合:架构、应用与未来挑战
  • 29、新计算范式研究推进策略与绿色移动云计算研究方向
  • 算法题目优选(蓝桥杯备战)--2
  • 英雄联盟游戏助手:让你的排位赛效率翻倍的秘密武器
  • SuperCom串口调试终极指南:从新手到专家的快速精通教程
  • 科学文库CAJ文档处理方案:提升知识管理效率的工具
  • 附件-–-behaviac
  • Windows 7系统下Umi-OCR兼容方案:让老旧设备也能高效文字识别
  • 联想拯救者工具箱完整指南:解锁硬件潜能的一站式解决方案
  • 暗黑3终极自动化辅助工具完整使用指南
  • 网易云音乐扩展引擎:开启个性化音频体验新篇章