小航养兔记 | 趣味C++课堂
跟着小航一起,看看兔子怎么越生越多!
3大模块、12个知识点,标注重点
兔子出生后第2个月成年,第3个月开始每月生一对小兔子。每对新生兔子也按同样规律繁殖。
1,1,2,3,5,8,13,21,34,55...从第3项起,每一项等于前两项之和。
知道前两个状态,就能推出下一个状态。像爬楼梯一样,一步一步推下去。
细胞分裂、浮萍生长、爬楼梯走法、银行利息等,都是递推思想的应用。
规律:每个月的兔子数 = 上个月的 + 上上个月的
a存上上个月值,b存上个月值,c是临时变量存当月值。三个变量像"滑动窗口"往后移。
当月兔子数 = 上上个月 + 上个月。因为上个月的兔子都在,上上个月的成年兔都能生宝宝。
必须先算c=a+b,再a=b,再b=c。顺序不能乱!否则a原来的值会丢失。
从第3个月开始循环,每次算一个月。循环变量i从3到n,每次i++。
循环一轮后,a代表第2月,b代表第3月,可以继续算第4月
n=1或n=2时直接输出1对,不需要进入循环。因为前两个月都是1。
a=1(第1个月),b=1(第2个月)。前两个月都是1对兔子。
循环结束后输出b,因为b已经被更新为第n个月的兔子数。
相邻两项的比值(前项/后项)越来越接近0.618,即黄金比例。
相邻比值:1/1=1.0, 1/2=0.5, 2/3=0.667, 3/5=0.6, 5/8=0.625, 8/13=0.615... 趋近 0.618 黄金比例!
① 斐波那契数列(1,1,2,3,5,8...每项=前两项之和)
② 递推公式(c=a+b,当月=前两个月之和)
③ 变量更新顺序(c=a+b → a=b → b=c,顺序不能乱)
④ if边界判断(n=1或2直接输出1)
⑤ for循环起点(从i=3开始,到i<=n结束)
填写代码空缺,算出N个月后有多少对兔子!
2道拓展代码填空,挑战更高难度
难度:⭐⭐ | 填空数:3
任务描述:修改程序,不仅输出第n个月的兔子数,还要在循环里每月都输出一次,让我们看到1,1,2,3,5,8...完整的数列增长过程。
提示:在for循环内,更新完a和b之后,加一行cout输出"第i个月有b对兔子"。
难度:⭐⭐⭐ | 填空数:3
任务描述:在输出每个月兔子数的同时,计算相邻两项的比值(前项/后项),观察它如何逐渐趋近0.618黄金比例。
提示:注意整数除法会得到0,要用1.0*a/b转成小数。a是前一个月,b是当月。
完成拓展任务后,输入老师/家长提供的密码,查看拓展题的完整答案与详细解析。
填空答案:
解析:
① c=a+b:和课堂代码一样,当月兔子数等于上上个月加上个月。这是递推核心。
② 输出i:循环变量i就是当前月份,从3到n,用它告诉用户这是第几个月。
③ 输出b:每次循环更新完b=c后,b就是当月的兔子数。所以cout输出b。
运行效果:输入6,会输出第3月:2、第4月:3、第5月:5、第6月:8,加上前面手动输出的第1月:1、第2月:1,完整数列就是1,1,2,3,5,8!
填空答案:
解析:
这道题只有1个空,但很有挑战!1.0*a/b 的意思是:
• a是前一个月的兔子数(上上个月更新后,a=上个月的值)
• b是当月的兔子数
• a/b 就是"前项/后项"的比值
• 必须乘以1.0!因为a和b都是整数,如果直接写a/b,C++会做整数除法,5/8=0而不是0.625!乘以1.0先把a变成小数,除法结果就是小数了。
运行效果:比值从1.0→0.5→0.667→0.6→0.625→0.615→0.619→0.618...逐渐稳定在0.618左右!这就是黄金比例!
密码由老师/家长提供,输入正确后可查看拓展题的完整答案与详细解析。
5道单选 + 3道判断,提交后查看判分与解析
斐波那契数列1,1,2,3,5,8,13...从第3项开始,每一项都等于前面两项之和:2=1+1, 3=1+2, 5=2+3, 8=3+5...这就是兔子繁殖问题中总结出的递推规律。
逐月推算:第1月1对,第2月1对,第3月1+1=2对,第4月1+2=3对,第5月2+3=5对,第6月3+5=8对。所以第6个月有8对兔子。记住数列:1,1,2,3,5,8!
c=a+b是递推公式的核心。a代表上上个月的兔子数,b代表上个月的兔子数,加起来c就是当月的兔子数。因为上个月的兔子都还在,上上个月的成年兔都能生一对宝宝,所以总数就是两者之和。
必须先算c=a+b算出当月值,然后才能把a和b往后挪!如果先a=b,那a原来的值(上上个月)就被覆盖丢失了,c=a+b就变成c=b+b,结果错误。顺序是:先用旧a和旧b算新c,再a=b(上月变上上月),再b=c(当月变上月)。
因为第1个月和第2个月都是1对兔子,没有递推关系,直接输出就行。从第3个月开始才需要用公式c=a+b计算。所以for循环从i=3开始,到i<=n结束。如果从i=1开始,前两个月会被错误地重复计算。
正确!第1个月买了一对小兔子(幼兔),第2个月兔子长大了变成成年兔,但数量还是1对,只是从幼兔变成了成年兔。从第3个月开始才开始繁殖,数量才变成2对。所以前两个月都是1对。
错误!如果先a=b,a原来的值(上上个月)就被覆盖了!假设a=1,b=1,先a=b变成a=1,b=1(这轮碰巧对),但下一轮a=1(应该是原来的b=1),c=a+b=1+1=2,b=c=2。再下一轮a=b=2(应该是原来的b=2),c=a+b=2+2=4...数列变成1,1,2,4,8,16...完全错误!正确顺序必须是先c=a+b,再a=b,再b=c。
正确!算一算:1/1=1.0, 1/2=0.5, 2/3=0.667, 3/5=0.6, 5/8=0.625, 8/13=0.615, 13/21=0.619, 21/34=0.618...越来越接近0.618!这就是神奇的黄金比例,被认为是最美的比例,在向日葵、鹦鹉螺、建筑设计中都能看到。
回顾本节课的重点知识