【C语言】手把手带你解决青蛙跳台阶问题

简介: 【C语言】手把手带你解决青蛙跳台阶问题

青蛙跳台阶问题的详细描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多上种跳法。


具体解决青蛙跳台阶问题

青蛙跳台阶问题解题思路分析

当N=1时,那么青蛙就只有一种跳法。

5cb891e92d914069a49e8d233d84f40a.png


当N=2时,青蛙可以跳两次一层台阶也可以跳一次二层台阶,有两种跳法。

aac408b2eb494d83ae099690a585eecc.png


当N=3时,青蛙可以先跳一次一层台阶,那么还需要跳两层台阶,那它此时就是N=2时的跳法,有两种跳法。


当青蛙跳一次二层台阶时,此时只需要跳一层台阶,那么它就是N=1时的跳法。


此时它的跳法就等于(N=1)+(N=2)种跳法。

429e4fb302274bcab91c8bf959d07506.png


当N=4时,青蛙跳一次一层台阶时,还需要跳三层台阶,那它此时剩下的跳法就等于N=3时的跳法,即有三种跳法。


青蛙跳一次二层台阶时,还剩二层台阶需要跳,那它此时剩下的跳法就是N=2时的跳法,则有两种跳法。


那么此时它的跳法就等于(N=2)+(N=3)种跳法。

2ebe3b7aad364e4e938e0493be6ef0aa.png


思路总结

那么,不难看出青蛙跳台阶的规律,当N>2时,此时的跳法数就等于前面两个青蛙跳台阶跳法数之和

在C语言中实现青蛙跳台阶

代码实现

#include<stdio.h>
int Jump(int n)
{
  if (n == 1)
  {
    return 1;//当只有一层台阶时直接返回1
  }
   if (n == 2)
  {
    return 2;//当只有2层台阶时就返回2
  }
   if (n > 2)
   {
     return Jump(n - 1) + Jump(n - 2);
   }//当n>2时,利用递归进行返回
}
int main()
{
  int n = 0;
  scanf("%d", &n);
  int num = Jump(n);
  printf("%d\n", num);
  return 0;
}

问题进阶:

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,也可以跳上3级台阶。求该青蛙跳上一个n级的台阶总共有多上种跳法。


思路分析

首先,当N=1时,那么青蛙就有一种跳法。


当N=2时,青蛙可以跳两次一层台阶也可以跳一次二层台阶,有两种跳法


当N=3时,当青蛙首先跳一次一层台阶时,那么还需要跳两层台阶,那它此时就是N=2时的跳法,即有两种跳法。

当青蛙跳一次二层台阶时,此时只需要再跳一层台阶,那么它此时就是N=1时的跳法,即有一种跳法。

最后就是青蛙直接跳三层台阶,只有一种跳法。那么它的跳法总数就是(N=1)+(N=2)+1=4种跳法。


当N=4时,青蛙跳一次一层台阶时,还剩三层台阶需要跳,那它此时就是N=3时的跳法,即有四种跳法。

青蛙跳一次二层台阶时,还剩二层台阶需要跳,那它此时就是N=2时的跳法,则有两种跳法。那么它的跳法总数即为(N=2)+(N=3)=6种跳法。


规律总结


当N>3时,本质上就是前面两个跳法相加就得到此时青蛙跳台阶方法的总数。


代码演示如下:


#include<stdio.h>
int Jump(int n)
{
  if (n == 1)
  {
    return 1;
  }
  if (n == 2)
  {
    return 2;
  }
  if (n == 3)
  {
    return 3;
  }
  if (n > 3)
  {
    return Jump(n - 1) + Jump(n - 2)+Jump(n-3);
  }
}
int main()
{
  int n = 0;
  scanf("%d", &n);
  int num = Jump(n);
  printf("%d\n", num);
  return 0;
}

注:

当青蛙每次可以跳k级台阶时咱们也可以像上面这样找到相应的规律求解

总结

今天的内容到这里就结束了,我们今天通过递归的方式具体解决了青蛙跳台阶。如果你还对步骤还有迷惑的话一定要自己试一下,不然光看是非常容易遗忘并且非常不容易理解的,咱们必须反复的练习才能熟悉起来!

好了,如果你有任何疑问欢迎在评论区或者私信我提出,大家下次再见啦!

新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下这个新人博主再走呗。你们的支持就是我更新的动力!!!


**(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)**


20fa3306e76244de9879742c165c792a.gif

目录
相关文章
|
2月前
|
存储 编译器 C语言
爱上C语言:函数递归,青蛙跳台阶图文详解
爱上C语言:函数递归,青蛙跳台阶图文详解
|
8月前
|
C语言
【C语言刷题】青蛙跳台阶
【C语言刷题】青蛙跳台阶
109 1
|
9月前
|
C语言
【C语言实现青蛙跳台阶问题】
【C语言实现青蛙跳台阶问题】
24 0
|
28天前
|
算法 C语言
C语言实现青蛙跳台阶问题
C语言实现青蛙跳台阶问题
26 5
|
2月前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
2月前
|
C语言
【C语言】青蛙跳台阶 —— 详解
【C语言】青蛙跳台阶 —— 详解
|
2月前
|
C语言 索引
【C语言】C语言⻘蛙跳台阶问题--递归问题
【C语言】C语言⻘蛙跳台阶问题--递归问题
|
12月前
|
C语言
【C语言】青蛙跳台阶(两种青蛙跳)
【C语言】青蛙跳台阶(两种青蛙跳)
117 0
【C语言】青蛙跳台阶(两种青蛙跳)
|
4天前
|
存储 缓存 C语言
【C语言】字符函数,字符串函数,内存函数
C语言中的字符串函数和内存函数
11 0
【C语言】字符函数,字符串函数,内存函数
|
10天前
|
C语言
C语言5 字符输出函数和格式输出函数
C语言5 字符输出函数和格式输出函数
15 1