【C语言初阶】青蛙跳台阶问题画图详解、带你深度剖析

在这里插入图片描述

你好,我是果粒.橙,可以叫我橙,一个正在与你们一起学习的在校专科生,本期内容:青蛙跳台阶,我将为大家介绍我怎么学会并实现青蛙跳台阶,希望通过本章对你有所帮助。如果看完对你有所帮助,帮我点个免费的赞哦!创作不易,当然如果文章里有哪些问题错误也欢迎评论区指出!谢谢,阿里嘎多!

本期内容

  • 题目描述:
  • 青蛙跳台阶规律是什么?
  • C语言实现青蛙跳台阶
  • 青蛙跳台阶和斐波那契数的区别

题目描述:

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法?
在这里插入图片描述

一、青蛙跳台阶规律是什么?

根据题目描述,我们可以知道青蛙一次可以跳一个台阶或者跳两个台阶,他跳上n级台阶共有多少总跳法?
我们可以动手的简单计算一下台阶n为1,2,3、4、5的跳法有多少种?
找到他的规律
在这里插入图片描述
由上面的图我们可以得出跳5个台阶,分别对应着几种跳法,我们可以得到一个规律就是跳前3个台阶时,台阶为几个就几种跳法;到第四个台阶时,规律就发生了变换,变成了n个台阶跳法的几种等于前两项跳法之和, 如:4个台阶跳法 = 3个台阶跳法+2个台阶跳法;第5个台阶也是如此
在这里插入图片描述

二、C语言实现青蛙跳台阶

递归写法:

由我们上面的剖析,得到的规律可写出如下公式:
blog.csdnimg.cn/8ba304fbf50c4f29884378b6069ad8a0.png)
拿到这个公式,我们写起递归的C语言实现代码就很简单了,如:

//递归写法:
#include<stdio.h> 
int Frog(int n) 
{ 	
   if (n <= 3) 		
       return n; 	
   else 		
       return Frog(n - 1) + Frog(n - 2);
}
int main()
{
   int n = 0;
   printf("请输入台阶数:"); 	
   scanf("%d", &n); 	
   int num = Frog(n);
   printf("共跳法:%d\n", num);

   return 0;
}

我们来看看运行结果是否如我们上面推到的结果一样:
在这里插入图片描述
运行结果果然如我们推导那样,说明这个代码是成功的!

非递归写法:

知道了递归的写法我们还要清楚非递归怎么去写,
根据上面规律,我们台阶数为前3的规律写法保持不变,台阶从第4个台阶看,画出如下图分析
在这里插入图片描述
按画图的思路写出如下代码:

//非递归(迭代写法):
#include<stdio.h>
int Frog(int n)
{
    if (n <= 3)
		return n;
	else
	{
		//a和b是n为4的前两项之和
		int a = 2;
		int b = 3;
		int c = 0;
		while (n > 3)
		{
			c = a + b;
			a = b;
			b = c;
			n--;//避免n没有发生变化导致死循环
		}
		return c;
	}
}
int main()
{
	int n = 0;
	printf("请输入台阶数:");
	scanf("%d", &n);
	int num = Frog(n);
	printf("共跳法:%d\n", num);

	return 0;
}

运行结果:
在这里插入图片描述
与推导结果一致,代码成功

三、青蛙跳台阶和斐波那契数的区别

看到这如果你写过了解过斐波那契数,那你会发现他两除了起始值不一样,其他都一样,没了解过看过的小伙伴可以参考一下我这篇《函数学习报告》中的练习4
【C语言初阶】函数学习报告

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

果粒.橙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值