第X课 斐波那契的兔子农场

小航养兔记 | 趣味C++课堂

🎬
课前动画
看小航的兔子怎么越生越多
💻
课堂项目
在线写代码,模拟兔子繁殖
📚
知识点体系
梳理本节课所有知识点
✏️
随堂测试
5道选择+3道判断,检验成果
🚀
拓展任务
输出每月数据,探索黄金比例
🌟
课后总结
动画回顾本节课重点
🌾
🐰 模块一:斐波那契与递推思维

1. 兔子繁殖规则 重点

兔子出生后第2个月成年,第3个月开始每月生一对小兔子。每对新生兔子也按同样规律繁殖。

第1月幼兔→第2月成年→第3月开始繁殖

2. 斐波那契数列 重点

1,1,2,3,5,8,13,21,34,55...从第3项起,每一项等于前两项之和。

f(n) = f(n-1) + f(n-2)

3. 递推思想

知道前两个状态,就能推出下一个状态。像爬楼梯一样,一步一步推下去。

已知f(1),f(2) → 推f(3) → 推f(4)

4. 生活中的递推

细胞分裂、浮萍生长、爬楼梯走法、银行利息等,都是递推思想的应用。

本月 = 上月 + 增量

🐰 兔子繁殖流程图

第1月
🐰🐰
1对(幼兔)
第2月
🐰🐰
1对(成年)
第3月
🐰🐰🐰🐰
2对
第4月
🐰×6
3对
第5月
🐰×10
5对

规律:每个月的兔子数 = 上个月的 + 上上个月的

🔄 模块二:变量与循环

5. 三个变量a/b/c 重点

a存上上个月值,b存上个月值,c是临时变量存当月值。三个变量像"滑动窗口"往后移。

a=上上个月, b=上个月, c=当月

6. 递推公式c=a+b 重点

当月兔子数 = 上上个月 + 上个月。因为上个月的兔子都在,上上个月的成年兔都能生宝宝。

c = a + b

7. 变量更新顺序 重点

必须先算c=a+b,再a=b,再b=c。顺序不能乱!否则a原来的值会丢失。

c=a+b → a=b → b=c

8. for循环实现

从第3个月开始循环,每次算一个月。循环变量i从3到n,每次i++。

for(i=3; i<=n; i++)

🔄 变量更新示意图(以第3个月为例)

初始
a=1, b=1
c=a+b
c=2
a=b
a=1
b=c
b=2

循环一轮后,a代表第2月,b代表第3月,可以继续算第4月

💻 模块三:边界与代码实现

9. if边界判断 重点

n=1或n=2时直接输出1对,不需要进入循环。因为前两个月都是1。

if(n==1||n==2) 输出1

10. 初始值设置

a=1(第1个月),b=1(第2个月)。前两个月都是1对兔子。

int a=1, b=1;

11. 输出结果

循环结束后输出b,因为b已经被更新为第n个月的兔子数。

cout << b << "对兔子";

12. 黄金比例

相邻两项的比值(前项/后项)越来越接近0.618,即黄金比例。

f(n-1)/f(n) → 0.618

📏 斐波那契数列数轴

1
1
2
3
5
8
13
21
34
55
89
144

相邻比值: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 黄金比例!

🎯 本节课5大重点

斐波那契数列(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结束)

rabbit_farm.cpp
#include <iostream>
using namespace std;
int main() {
    int n;
    cout << "请输入月份数:";
    cin >> n;
    
    int a = ; // ①第1个月兔子对数
    int b = ; // ②第2个月兔子对数
    int c; // 临时变量,存当月兔子数
    
    if(n ) { // ③边界条件
        cout << "第" << n << "个月有1对兔子" << endl;
    } else {
        for(int i = ; i ; i++) { // ④⑤循环条件
            c = ; // ⑥当月=前两个月之和
            a = ; // ⑦更新:上月→上上月
            b = ; // ⑧更新:当月→上月
        }
        cout << "第" << n << "个月有" << b << "对兔子" << endl;
    }
    return 0;
}

🎮 操作按钮

📤 输出结果

// 点击"运行程序"查看输出

💡 填空提示

  • ① 第1个月买了几对兔子?
  • ② 第2个月兔子长大了,有几对?
  • ③ n等于1或2时,条件怎么写?
  • ④ 从第几个月开始需要递推?
  • ⑤ 循环到第n个月结束,用<=还是<?
  • ⑥ 当月 = 哪两个变量相加?
  • ⑦ a更新成谁?(上个月的值)
  • ⑧ b更新成谁?(刚算出的当月值)
1

输出每个月的兔子数

难度:⭐⭐ | 填空数:3

任务描述:修改程序,不仅输出第n个月的兔子数,还要在循环里每月都输出一次,让我们看到1,1,2,3,5,8...完整的数列增长过程。

提示:在for循环内,更新完a和b之后,加一行cout输出"第i个月有b对兔子"。

extend1_each_month.cpp
#include <iostream>
using namespace std;
int main() {
    int n;
    cout << "请输入月份数:";
    cin >> n;
    int a = 1, b = 1, c;
    cout << "第1个月有1对兔子" << endl;
    cout << "第2个月有1对兔子" << endl;
    if(n >= 3) {
        for(int i = 3; i <= n; i++) {
            c = ;
            a = b;
            b = c;
            // 拓展1:输出当月数据
            cout << "第" << << "个月有" << << "对兔子" << endl;
        }
    }
    return 0;
}

🎮 操作

📤 输出

// 点击"运行"查看输出
0
2

黄金比例探索

难度:⭐⭐⭐ | 填空数:3

任务描述:在输出每个月兔子数的同时,计算相邻两项的比值(前项/后项),观察它如何逐渐趋近0.618黄金比例。

提示:注意整数除法会得到0,要用1.0*a/b转成小数。a是前一个月,b是当月。

extend2_golden.cpp
#include <iostream>
using namespace std;
int main() {
    int n = 12;
    int a = 1, b = 1, c;
    cout << "第1月:1 第2月:1" << endl;
    for(int i = 3; i <= n; i++) {
        c = a + b;
        a = b;
        b = c;
        // 拓展2:输出比值(用1.0转小数)
        cout << "第" << i << "月:" << b << " 比值=" << << endl;
    }
    cout << "比值越来越接近 0.618 黄金比例!" << endl;
    return 0;
}

🎮 操作

📤 输出

// 点击"运行"查看输出
0

🔐 拓展任务答案解析

完成拓展任务后,输入老师/家长提供的密码,查看拓展题的完整答案与详细解析。

拓展1:输出每个月的兔子数 — 答案解析

填空答案:

a+b — 当月 = 前两个月之和
i — 输出当前月份(循环变量)
b — 输出当月兔子数(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!

拓展2:黄金比例探索 — 答案解析

填空答案:

1.0*a/b — 前项除以后项,用1.0转小数

解析:

这道题只有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左右!这就是黄金比例!

🔒

输入密码查看答案解析

密码由老师/家长提供,输入正确后可查看拓展题的完整答案与详细解析。

❌ 密码错误,请重试
🎉 答题完成!
0
第1题单选题
斐波那契数列的规律是什么?

✅ 正确答案:B

斐波那契数列1,1,2,3,5,8,13...从第3项开始,每一项都等于前面两项之和:2=1+1, 3=1+2, 5=2+3, 8=3+5...这就是兔子繁殖问题中总结出的递推规律。

第2题单选题
按照兔子繁殖规律,第6个月有多少对兔子?

✅ 正确答案:B

逐月推算:第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!

第3题单选题(中)
代码中 c = a + b 的作用是什么?

✅ 正确答案:A

c=a+b是递推公式的核心。a代表上上个月的兔子数,b代表上个月的兔子数,加起来c就是当月的兔子数。因为上个月的兔子都还在,上上个月的成年兔都能生一对宝宝,所以总数就是两者之和。

第4题单选题(中)
变量更新的正确顺序是什么?

✅ 正确答案:B

必须先算c=a+b算出当月值,然后才能把a和b往后挪!如果先a=b,那a原来的值(上上个月)就被覆盖丢失了,c=a+b就变成c=b+b,结果错误。顺序是:先用旧a和旧b算新c,再a=b(上月变上上月),再b=c(当月变上月)。

第5题单选题(难)
for循环应该从第几个月开始?

✅ 正确答案:C

因为第1个月和第2个月都是1对兔子,没有递推关系,直接输出就行。从第3个月开始才需要用公式c=a+b计算。所以for循环从i=3开始,到i<=n结束。如果从i=1开始,前两个月会被错误地重复计算。

第6题判断题
第1个月和第2个月都有1对兔子。

✅ 正确答案:✅ 正确

正确!第1个月买了一对小兔子(幼兔),第2个月兔子长大了变成成年兔,但数量还是1对,只是从幼兔变成了成年兔。从第3个月开始才开始繁殖,数量才变成2对。所以前两个月都是1对。

第7题判断题(中)
变量更新可以写成 a=b; c=a+b; b=c,结果是一样的。

✅ 正确答案:❌ 错误

错误!如果先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。

第8题判断题(难)
斐波那契数列相邻两项的比值(前项/后项)会越来越接近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, 13/21=0.619, 21/34=0.618...越来越接近0.618!这就是神奇的黄金比例,被认为是最美的比例,在向日葵、鹦鹉螺、建筑设计中都能看到。

🎉 本节课你学会了什么?
斐波那契——从兔子农场发现的大自然密码!
🐰
兔子繁殖
第2月成年,第3月开始每月生一对
🔢
斐波那契数列
1,1,2,3,5,8,13...每项=前两项之和
🔄
递推公式
c=a+b; a=b; b=c(顺序不能乱!)
for循环
从i=3开始,到i<=n结束,逐月递推
📏
if边界
n=1或2直接输出1,否则进入循环
黄金比例
相邻比值趋近0.618,大自然的密码
🚀 继续保持这份探索精神,下节课见!