【C语言初阶】青蛙跳台阶问题画图详解、带你深度剖析-创新互联
你好,我是果粒.橙,可以叫我橙,一个正在与你们一起学习的在校专科生,本期内容:青蛙跳台阶,我将为大家介绍我怎么学会并实现青蛙跳台阶,希望通过本章对你有所帮助。如果看完对你有所帮助,帮我点个免费的赞哦!创作不易,当然如果文章里有哪些问题错误也欢迎评论区指出!谢谢,阿里嘎多!
本期内容- 题目描述:
- 青蛙跳台阶规律是什么?
- C语言实现青蛙跳台阶
- 青蛙跳台阶和斐波那契数的区别
题目描述:
一、青蛙跳台阶规律是什么?一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法?
二、C语言实现青蛙跳台阶 递归写法:根据题目描述,我们可以知道青蛙一次可以跳一个台阶或者跳两个台阶,他跳上n级台阶共有多少总跳法?
我们可以动手的简单计算一下台阶n为1,2,3、4、5的跳法有多少种?
找到他的规律
由上面的图我们可以得出跳5个台阶,分别对应着几种跳法,我们可以得到一个规律就是跳前3个台阶时,台阶为几个就几种跳法;到第四个台阶时,规律就发生了变换,变成了n个台阶跳法的几种等于前两项跳法之和, 如:4个台阶跳法 = 3个台阶跳法+2个台阶跳法;第5个台阶也是如此
非递归写法:由我们上面的剖析,得到的规律可写出如下公式:
拿到这个公式,我们写起递归的C语言实现代码就很简单了,如://递归写法: #include
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
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语言初阶】函数学习报告
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
名称栏目:【C语言初阶】青蛙跳台阶问题画图详解、带你深度剖析-创新互联
文章出自:http://myzitong.com/article/dpdidi.html