news 2026/4/23 13:35:02

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

作者头像

张小明

前端开发工程师

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/4/23 12:44:59

FlexboxLayout布局革命:WrapBefore属性深度解析与实战应用

FlexboxLayout布局革命&#xff1a;WrapBefore属性深度解析与实战应用 【免费下载链接】flexbox-layout Flexbox for Android 项目地址: https://gitcode.com/gh_mirrors/fl/flexbox-layout 你是否曾为Android布局中复杂的换行需求而烦恼&#xff1f;当传统的LinearLay…

作者头像 李华
网站建设 2026/4/23 12:48:29

3分钟极速修复:六音音源完美兼容洛雪音乐全攻略

3分钟极速修复&#xff1a;六音音源完美兼容洛雪音乐全攻略 【免费下载链接】New_lxmusic_source 六音音源修复版 项目地址: https://gitcode.com/gh_mirrors/ne/New_lxmusic_source 还在为洛雪音乐升级后无法播放而苦恼&#xff1f;六音音源修复项目为您提供简单高效的…

作者头像 李华
网站建设 2026/4/22 13:04:26

OpenKM 知识管理系统:企业文档管控的终极解决方案

在数字化浪潮席卷全球的今天&#xff0c;企业面临着前所未有的文档管理挑战。海量文档的存储、检索、版本控制和安全管控已成为企业运营效率的关键瓶颈。OpenKM作为一款成熟的开源文档管理系统&#xff0c;凭借其完整的功能生态和强大的扩展能力&#xff0c;为企业提供了一站式…

作者头像 李华
网站建设 2026/4/22 21:59:58

哔哩下载姬DownKyi:打造个人B站视频库的完整指南

哔哩下载姬DownKyi&#xff1a;打造个人B站视频库的完整指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09…

作者头像 李华
网站建设 2026/4/23 12:47:41

KKManager完全攻略:从零开始掌握游戏Mod管理神器

KKManager完全攻略&#xff1a;从零开始掌握游戏Mod管理神器 【免费下载链接】KKManager Mod, plugin and card manager for games by Illusion that use BepInEx 项目地址: https://gitcode.com/gh_mirrors/kk/KKManager 还在为游戏Mod管理烦恼吗&#xff1f;KKManager…

作者头像 李华
网站建设 2026/4/16 9:10:26

三步掌握Mammoth.js:Word文档转HTML全流程解析

三步掌握Mammoth.js&#xff1a;Word文档转HTML全流程解析 【免费下载链接】mammoth.js Convert Word documents (.docx files) to HTML 项目地址: https://gitcode.com/gh_mirrors/ma/mammoth.js Mammoth.js是一个专注于将Word文档&#xff08;.docx格式&#xff09;转…

作者头像 李华