C语言实现青蛙跳台阶问题

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: C语言实现青蛙跳台阶问题

前言

青蛙跳台阶是一个非常经典的递归问题,其具体问题是:

一只青蛙想要跳上一个台阶,这个台阶一共有n级,青蛙一次可以选择跳1级台阶或者跳2级台阶,那么青蛙一共有多少种方法可以跳上台阶呢?


一、问题分析

1.当台阶只有1级时

此时青蛙只有一种跳法,那就是跳1级

2.当台阶有2级时

不难看出,青蛙有两种跳法,一是跳1级再跳1级,二是一下跳2级。

3.当台阶有n级时

当台阶有n级时,题目好像一下子就复杂起来了,青蛙该怎么跳啊,其实不然,我们换个方向思考。

假如青蛙已经跳到了最上面,也就是第n级台阶,那青蛙有几种方法跳上来的呢?这就很清晰了,青蛙可能是从n-1级台阶跳了1级台阶上来的,又或者是从n-2级台阶跳了2级台阶上来的。

n来自n-1或者n-2,n-1来自n-2或者n-3,n-2来自n-3或者n-4…

一直到n-(n-1)来自0,n-(n-2)来自1或者0。

不难发现,这个方法在不断根据一个未知去往前推到已知,很标准的递归方式,故本题使用递归方法就可实现。

二、代码实现

1.完整代码

代码如下:

#include<stdio.h>
int main()
{
  int step = 0;
  scanf("%d", &step);
  int ret = jump(step);
  printf("青蛙有%d种方式跳到%d级台阶上", ret, step);
  return 0;
}
int jump(int step)
{
  //只跳了一级
  if (1 == step)
  {
    return 1;
  }
  //跳了两级
  else if (2 == step)
    return 2;
  else
    return jump(step - 1) + jump(step - 2);
}

2.结果测试

结果如下:

1级台阶:

2级台阶:

20级台阶:

台阶数不宜过多,因为递归算法重复计算的数据较多,占用时间长,过多的重复计算会导致程序执行很慢。


总结

本篇浅显了介绍了如何在C语言中使用递归算法实现小小的青蛙跳台阶的问题,重点不再如何解决问题,而在于对递归思想的一种理解和加深。递归可以解决很多新奇有趣的题目,若是日后遇见看不懂且感觉有规律的题,不妨用用递归。

目录
相关文章
|
存储 编译器 C语言
爱上C语言:函数递归,青蛙跳台阶图文详解
爱上C语言:函数递归,青蛙跳台阶图文详解
230 0
|
C语言
【C语言刷题】青蛙跳台阶
【C语言刷题】青蛙跳台阶
254 1
|
C语言
【C语言实现青蛙跳台阶问题】
【C语言实现青蛙跳台阶问题】
188 0
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
202 0
|
C语言 索引
【C语言】C语言⻘蛙跳台阶问题--递归问题
【C语言】C语言⻘蛙跳台阶问题--递归问题
273 4
|
C语言
【C语言】青蛙跳台阶 —— 详解
【C语言】青蛙跳台阶 —— 详解
|
C语言
【C语言】青蛙跳台阶(两种青蛙跳)
【C语言】青蛙跳台阶(两种青蛙跳)
346 0
【C语言】青蛙跳台阶(两种青蛙跳)
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
932 23
|
10月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
1544 0
|
12月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
507 15