news 2026/8/9 21:53:54

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

作者头像

张小明

前端开发工程师

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/8/8 18:56:33

Elsevier Tracker终极指南:科研论文审稿状态智能监控解决方案

Elsevier Tracker终极指南&#xff1a;科研论文审稿状态智能监控解决方案 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 作为一名长期奋战在科研一线的学者&#xff0c;你是否也曾为追踪论文审稿进度而焦头烂额&am…

作者头像 李华
网站建设 2026/8/7 19:25:40

Android系统安全检测绕过技术:从原理到实战

Android系统安全检测绕过技术&#xff1a;从原理到实战 【免费下载链接】safetynet-fix Google SafetyNet attestation workarounds for Magisk 项目地址: https://gitcode.com/gh_mirrors/sa/safetynet-fix 还在为Android设备的SafetyNet检测而烦恼吗&#xff1f;本文将…

作者头像 李华
网站建设 2026/8/9 18:14:09

Umi-OCR Windows 7系统兼容性完美解决方案

Umi-OCR Windows 7系统兼容性完美解决方案 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub_Trending/um/Umi-OCR…

作者头像 李华
网站建设 2026/8/5 21:32:27

WinAsar:Windows平台asar文件处理的终极解决方案

WinAsar&#xff1a;Windows平台asar文件处理的终极解决方案 【免费下载链接】WinAsar 项目地址: https://gitcode.com/gh_mirrors/wi/WinAsar 作为Electron应用开发中不可或缺的asar文件处理工具&#xff0c;WinAsar为Windows用户提供了简单高效的图形界面解决方案。这…

作者头像 李华
网站建设 2026/8/8 1:42:07

多设备办公新体验:Lan Mouse让一套键鼠掌控全局

还在为桌面上的多台电脑频繁切换键盘鼠标而烦恼吗&#xff1f;想象一下这样的场景&#xff1a;你的左边是Windows工作站&#xff0c;右边是Linux开发机&#xff0c;面前还摆着macOS笔记本。每次切换设备都要重新调整手部位置&#xff0c;打断工作流程&#xff0c;效率大打折扣。…

作者头像 李华
网站建设 2026/8/9 6:12:42

Freqtrade策略评估终极指南:5步从数据小白到量化高手

Freqtrade策略评估终极指南&#xff1a;5步从数据小白到量化高手 【免费下载链接】freqtrade Free, open source crypto trading bot 项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade 还在为看不懂回测报告发愁吗&#xff1f;&#x1f914; 每次看到一堆数…

作者头像 李华