【C语言】青蛙跳台阶问题

2024-04-09 1504阅读

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

题目分析:

  • 当 n 等于 1 时,青蛙只能跳一级台阶到达,因此只有一种跳法,直接返回 1。
  • 当 n 等于 2 时,青蛙可以选择跳一级或跳两级来到达,因此有两种跳法,直接返回 2。
  • 对于 n 大于 2 的情况,青蛙可以跳一级到第 n-1 级台阶,或者青蛙可以跳两级到第 n-2 级台阶,此时跳1级的跳法剩下1级台阶,跳2级的跳法剩下2级台阶,对于剩下1级台阶时,正好符合n == 1的情况,当剩下2级台阶时,正好符合n == 2的情况。
  • 因此,n > 2时,就是分别计算n-1与n-2的可能次数,相对应的就是跳1级台阶的跳法与跳2级台阶的跳法。为什么要进行n-1与n-2呢?因为跳1级台阶跳到n-1时,只剩1级台阶,程序就会走n == 1的情况,跳2级台阶跳到n-2时,只剩2级台阶,程序就会走n == 2的情况。
  • 最后将两种情况相加。
  • 看看代码吧:
    //青蛙跳台阶问题
    //类似于斐波那契数
    int frogJump(int n)
    {
    	//当台阶数为1时,只有1种跳法
    	if (1 == n)
    		return 1;
    	//当台阶数为2时,只有2种跳法
    	if (2 == n)
    		return 2;
    	//forgJump(n - 1)的作用为所有跳1层台阶的可能次数
    	//forgJump(n - 2)的作用为所有跳2层台阶的可能次数
    	//最后相加 == 总可能次数
    	//n-1与n-2的意思为,从n直到剩下1层台阶,从n直到剩下2层台阶,然后就会进入n==1或n==2
    	//进行返回
    	return frogJump(n - 1) + frogJump(n - 2);
    }
    int main()
    {
    	int n = 0; //台阶数
    	scanf("%d", &n);
    	int count = frogJump(n);
    	printf("跳法:%d\n", count);
    	return 0;
    }

    如果您还理解不了,来看看代码图解吧:

    【C语言】青蛙跳台阶问题

    这种递归方法虽然直观易懂,但是对于较大的n值,会导致大量的重复计算,效率较低。在实际应用中,我们通常会使用动态规划方法来避免这种重复计算,提高算法的效率。


VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]