青蛙跳台阶问题的简单实现与理解(递归实现)

简介: 青蛙跳台阶问题的简单实现与理解(递归实现)

青蛙走n阶台阶,它可以选择跳一阶或者跳两阶,那么他一共有多少种跳法?

我们先来简单看一下这个问题,并简单实现一下青蛙跳

1节台阶:跳1

2阶台阶:(1)跳1 跳1 (2)跳2

3阶台阶:(1)跳1跳1跳1 (2)跳1跳2 (3)跳2跳1

4阶台阶: (1)跳1跳1跳1跳1 (2)跳1跳1跳2 (3)跳1跳2跳1 (4)跳2跳1跳1 (5)跳2跳2

、、、、、、

、、、、、、

n阶台阶:

我们发现后面情况越来越多,计算也越来越复杂,但是当我仔细思考后不难发现

1、关于跳台阶问题,无论怎样上台阶,最后一步都会剩下两种情况:1.还有一步 2.还有两步;

2、而当台阶数小于二时,跳台阶的方法就等于台阶数目;

3、换个思维我们只需要将台阶数全化为两个台阶,然后考虑两个台阶的情况;

4、那我们就可以用递归的方法进行实现,递归结束的条件就为只剩下两个台阶的时候

5、可以将该问题简单看为:前面所走 + 最后一步

       //我们先讨论最后一步,就非常简单,

       //然后又把前面所走看为:前前面所走 + 最后一步(为到达前面所走的最后一步)

       //依次进行,向后递,当台阶数小于2时,归;

代码实现如下,不考虑溢出:

#include <stdio.h>
//关于跳台阶问题,无论怎样上台阶,最后一步都会剩下两种情况:1.还有一步 2.还有两步;
//而当台阶数小于二时,跳台阶的方法就等于台阶数目;
//换个思维我们只需要将台阶数全化为两个台阶,然后考虑两个台阶的情况;
//那我们就可以用递归的方法进行实现,递归结束的条件就为只剩下两个台阶的时候;
int Fib(int n) {
    if (n <= 2) //递归的结束条件,当还之剩下两个台阶时
    {
        return n;
    }
    else {
        return Fib(n - 1) + Fib(n - 2);//两种情况,将跳台阶简单化,层层剥离,
        //可以将该问题简单看为:前面所走 + 最后一步
        //我们先讨论最后一步,就非常简单,
        //然后又把前面所走看为:前前面所走 + 最后一步(为到达前面所走的最后一步)
        //依次进行,向后递,当台阶数小于2时,归;
    }
}
int main() {
    int n = 0;
    scanf("%d", &n);
    int ret = Fib(n);
    printf("%d\n", ret);
    return 0;
}


以上是博主初学递归,对青蛙跳台阶问题自己的理解,若有描述不对的地方,欢迎大佬们评论区指正。


相关文章
|
1月前
|
算法 定位技术
数据结构与算法学习九:学习递归。递归的经典实例:打印问题、阶乘问题、递归-迷宫问题、八皇后问题
本文详细介绍了递归的概念、重要规则、形式,并展示了递归在解决打印问题、阶乘问题、迷宫问题和八皇后问题等经典实例中的应用。
40 0
|
6月前
|
Java Python
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
93 0
|
机器学习/深度学习
递归实现 八皇后问题(*)
递归实现 八皇后问题(*)
139 0
递归实现 八皇后问题(*)
浅谈递归函数(最后一个例题:浅谈汉诺塔思路与代码)
浅谈递归函数(最后一个例题:浅谈汉诺塔思路与代码)
|
算法 程序员
彻底搞懂递归的时间复杂度
彻底搞懂递归的时间复杂度
354 0
|
算法 程序员
让你彻底搞懂递归时间复杂度
让你彻底搞懂递归时间复杂度
122 0
|
机器学习/深度学习
青蛙跳台阶(递归)
青蛙跳台阶(递归)
97 0
|
算法
力扣704二分查找:思路分析+代码实现(递归与非递归)
力扣704二分查找:思路分析+代码实现(递归与非递归)
132 0
【递归】青蛙跳台阶的变式题你还会吗?
【递归】青蛙跳台阶的变式题你还会吗?
123 0
【递归】青蛙跳台阶的变式题你还会吗?
|
算法 Java
Java实现递归回溯,解决八皇后问题,数据结构与算法
Java实现递归回溯,解决八皇后问题,数据结构与算法
159 0
Java实现递归回溯,解决八皇后问题,数据结构与算法