news 2026/11/3 17:15:24

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
青蛙跳台阶用函数的递归解决

问题

一只青蛙想要跳到第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 级版)的本质是多阶递推的组合问题:

  • 递归思路适合理解问题本质,嵌套函数实现符合语法要求,但需记忆化优化性能;
  • 动态规划是工程最优解,兼顾时间 / 空间效率;
  • 核心是抓住 “当前级跳法数 = 所有合法前序级跳法数之和” 的递推关系,同时做好边界过滤和数据类型适配。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 2:47:29

OpenKM文档管理系统:企业级部署与配置完全指南

OpenKM文档管理系统&#xff1a;企业级部署与配置完全指南 【免费下载链接】document-management-system OpenKM is a Open Source Document Management System 项目地址: https://gitcode.com/gh_mirrors/do/document-management-system 还在为海量文档管理而烦恼吗&am…

作者头像 李华
网站建设 2026/11/2 5:32:18

PiliPlus完整指南:解锁B站第三方客户端的10大隐藏功能

PiliPlus完整指南&#xff1a;解锁B站第三方客户端的10大隐藏功能 【免费下载链接】PiliPlus PiliPlus 项目地址: https://gitcode.com/gh_mirrors/pi/PiliPlus PiliPlus是一款基于Flutter开发的B站第三方客户端&#xff0c;专为追求极致观看体验的用户设计。它不仅完美…

作者头像 李华
网站建设 2026/11/3 9:20:10

ExifToolGui终极指南:照片元数据管理完整教程

ExifToolGui终极指南&#xff1a;照片元数据管理完整教程 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 在数字摄影时代&#xff0c;照片元数据管理已成为摄影爱好者和专业用户的必备技能。ExifToolGui作为…

作者头像 李华
网站建设 2026/11/3 22:07:50

Draw.io Mermaid插件终极指南:从零开始掌握文本转图表神器

Draw.io Mermaid插件终极指南&#xff1a;从零开始掌握文本转图表神器 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin 想要用简单的文本描述快速生成专业图表吗&#x…

作者头像 李华
网站建设 2026/11/3 21:04:34

Easy-Scraper终极指南:零基础掌握网页数据采集技巧

Easy-Scraper终极指南&#xff1a;零基础掌握网页数据采集技巧 【免费下载链接】easy-scraper Easy scraping library 项目地址: https://gitcode.com/gh_mirrors/ea/easy-scraper 还在为复杂的数据抓取任务而烦恼吗&#xff1f;传统爬虫工具需要掌握繁琐的CSS选择器或X…

作者头像 李华
网站建设 2026/11/4 6:42:41

27、Google幻灯片文本操作与格式设置全攻略

Google幻灯片文本操作与格式设置全攻略 在使用Google幻灯片进行演示文稿创作时,文本的操作和格式设置是非常重要的环节。下面将详细介绍如何移动和调整文本区域、选择和处理文本,以及对文本和文本区域进行格式设置等内容。 1. 移动和调整文本区域 移动文本区域 当鼠标光标…

作者头像 李华