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

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

青蛙走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;
}


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


相关文章
|
算法
单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化
单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化
46 0
|
4月前
|
存储 算法 C语言
C语言手撕实战代码_二叉树_构造二叉树_层序遍历二叉树_二叉树深度的超详细代码实现
这段代码和文本介绍了一系列二叉树相关的问题及其解决方案。其中包括根据前序和中序序列构建二叉树、通过层次遍历序列和中序序列创建二叉树、计算二叉树节点数量、叶子节点数量、度为1的节点数量、二叉树高度、特定节点子树深度、判断两棵树是否相似、将叶子节点链接成双向链表、计算算术表达式的值、判断是否为完全二叉树以及求二叉树的最大宽度等。每道题目均提供了详细的算法思路及相应的C/C++代码实现,帮助读者理解和掌握二叉树的基本操作与应用。
|
8月前
leetcode代码记录(动态规划基础题(斐波那契数列)
leetcode代码记录(动态规划基础题(斐波那契数列)
40 0
浅谈递归函数(最后一个例题:浅谈汉诺塔思路与代码)
浅谈递归函数(最后一个例题:浅谈汉诺塔思路与代码)
|
机器学习/深度学习 存储 算法
【数据结构与算法篇】手撕八大排序算法之快排的非递归实现及递归版本优化(三路划分)
【数据结构与算法篇】手撕八大排序算法之快排的非递归实现及递归版本优化(三路划分)
235 0
|
机器学习/深度学习
青蛙跳台阶(递归)
青蛙跳台阶(递归)
106 0
|
算法
力扣704二分查找:思路分析+代码实现(递归与非递归)
力扣704二分查找:思路分析+代码实现(递归与非递归)
146 0
|
存储 搜索推荐 索引
快排图文详解:快速排序算法的实现 - 【双边循环法与单边循环法 & 递归与非递归(栈的方式)的实现】(二)
快排图文详解:快速排序算法的实现 - 【双边循环法与单边循环法 & 递归与非递归(栈的方式)的实现】
207 0
|
搜索推荐 算法 索引
快排图文详解:快速排序算法的实现 - 【双边循环法与单边循环法 & 递归与非递归(栈的方式)的实现】(一)
快排图文详解:快速排序算法的实现 - 【双边循环法与单边循环法 & 递归与非递归(栈的方式)的实现】
224 0
|
存储 C语言
【非递归】手搓快速排序
【非递归】手搓快速排序
100 0