【C语言】青蛙跳台阶(两种青蛙跳)

前言
🎈大家好,我是何小侠🎈
🌀大家可以叫我**小何或者小侠🌀**
🔴我是一名普通的博客写作者🔴
💐希望能通过写博客加深自己对于学习内容的理解💐
🌸也能帮助更多人理解和学习🌸
🍃我的主页: 何小侠的主页🍃

在这里插入图片描述

在这里插入图片描述


    这篇博客我们一起来学习青蛙跳台阶问题,也就是递归。希望大家能有所收获。
    🍊

    青蛙跳台阶(常见版本)🍊

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

    在这里插入图片描述

    我们遇到这种问题还是需要找规律

    很明显,我们能发现一些规律
    在这里插入图片描述
    我们假设 f ( n )就是跳上 n 级阶梯的方法,我们知道青蛙第一步只能跳1级或二级,
    那么我们是不是可以推出 f ( n ) = f(n -1 )+ f (n -2)。
    f ( n-1 )就是先跳1级后剩下n-1级的跳法,f ( n-2 )就是先跳2级后剩下n-2级的跳法.

    或者说我们也可以得到
    当我们的阶数为 n = 3 的时候,也就是 f( 3 ) = f (n - 1) + f (n - 2 ),这样是不是更清楚呢?
    所以我们可以得到:

    在这里插入图片描述

    这就是我们最后得出的公式。其实就是一个变种的斐波那契数列

    代码

    #include<stdio.h>
    int  f(int n)
    {
    	if (1 == n)
    		return 1;
    	else if (2 == n)
    		return 2;
    	else if (n > 2)
    	{
    		return f(n - 1) + f(n - 2);
    	}
    
    }
    
    
    
    int main()
    {
    	int n = 0;
    	printf("请输入你想累死青蛙的阶数\n");
    	scanf("%d", &n);
    	printf("青蛙要跳%d次\n",f(n));
    	
    	return 0;
    }
    
    
    

    青蛙跳台阶(另外版本)🍊

    规则:
    有一只青蛙,它是青蛙中战斗机,青蛙中的博尔特,它一次可以跳上一级台阶,也可以跳上二级台阶······也可以跳n级,求该青蛙跳上一个n级的台阶总共需要多少种跳法。

    这个思路其实要和上面的一般版本青蛙跳结合一下。
    在这里插入图片描述
    我们看到它的第一步跳法如上所示,它既可以跳1级,也可以2级,也可以3级·····甚至直接跳到终点。

    假设我们还是设f ( n ) 为 n 跳上n级台阶的跳法。 那么 f ( n ) = f (n -1) + f ( n -2 ) + ······f ( 2 ) + f ( 1 ) +f ( 0 ).
    我们在上一个青蛙跳版本说过,如果青蛙一次只能跳1或2级,那么f ( n ) =f ( n -1)+ f (n-2 ),而在这个版本不就是一个思路吗?青蛙的跳越的能力提升了,那么我们的等式也应该变长!
    再来看看这个等式 f ( n ) = f (n -1) + f ( n -2 ) + ······f ( 2 ) + f ( 1 ) +f ( 0 ).
    如果青蛙第一次跳1级那么剩下的级数就是n-1,
    也就是说剩下f ( n-1)种跳法,
    那么青蛙如果一次跳n-1级,
    那么最后剩下的一级就是n阶级,也就是f (1),
    最后f (0)就是我们的青蛙最厉害的时候,直接从地面跳到终点,
    那么f (0)当然就==1了;

    我们还是把我们的分析写成表格更好大家理解。
    在这里插入图片描述
    因为我们已经换了一直青蛙了,就那4 阶数举例吧。青蛙先跳1级剩下的就是f ( 3 )种跳法,先跳2级就是f ( 2 ),······最后就是直接从地面跳到终点就是 f ( 0 )就是 1种跳法。
    最后我们要推出这个递归条件!

    我们知道
    f ( n ) = f (n -1) + f ( n -2 ) + ······f ( 2 ) + f ( 1 ) +f ( 0 ).
    f (n -1 ) = f ( n -2 ) + ······f ( 2 ) + f ( 1 ) +f ( 0 ).
    所以
    f ( n = f( n -1 ) + f( n -1 ) = 2 * f (n -1).

    代码🍊

    #include<stdio.h>
    int  f(int n)
    {
    	if (n < 3)
    		return n;
    	else if (n > 2)
    	{
    		return 2 * f(n - 1);
    	}
    
    }
    
    int main()
    {
    	int n = 0;
    	printf("请输入你想累死青蛙的阶数\n");
    	scanf("%d", &n);
    	printf("青蛙要跳%d次\n",f(n));
    	
    	return 0;
    }
    
    

    总结🍊

    这篇博客我们介绍了斐波那契数列的变种两个青蛙跳问题,我们不仅能从中学到数学思维和表达,也能加强我们的递归理解和能力

    最后如果这篇博客有帮助到你,欢迎点赞关注加收藏

    在这里插入图片描述在这里插入图片描述
    如果本文有任何错误或者有疑点欢迎在评论区评论
    在这里插入图片描述

    在这里插入图片描述

    • 4
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 打赏
      打赏
    • 2
      评论
    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    He XIAO xia

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值