关注

CCF-GESP四级C++考试---递推算法

🌱 第一章:什么是递推?

         ——《会自己长大的数字树》


1、想象有一棵神奇的树 🌳

(1)第一天,树上只有 1片叶子


(2)第二天,每片叶子会长出 2片新叶子


(3)我们记录每天的叶子数量:

天数叶子数
第1天1
第2天2
第3天4
第4天8
第5天16

(4)你会发现一个秘密:

👉 今天的叶子数 = 昨天的叶子数 × 2

      这就是:递推公式


2、🎯 递推的本质

(1)用前面的结果,推出后面的结果

就像:

今天 = 昨天 推出来的
未来 = 现在 推出来的

这就叫:

(2)✅ 递推(一步一步推出来)


(3)这是GESP四级C++考试大纲中,必考的算法。


🌟 第二章:用生活故事理解递推

1、🐰故事:兔子生宝宝

(1)农场有兔子:

第1个月:1只兔子
第2个月:1只兔子


(2)从第3个月开始:

每只成熟兔子每个月生1只新兔子


2、算一算:

月份兔子数
11
21
32
43
55
68

3、递推的秘密:

第n月兔子数 = 第n-1月兔子数 + 第n-2月兔子数

4、这就是著名的:

🌟 斐波那契数列


🧠 第三章:递推的3个关键部分

任何递推必须有:

1、 初始值(最开始)

比如:

第1天 = 1
第2天 = 1

否则无法开始

就像没有第一块积木,无法搭房子 🧱


2、递推公式(核心)

比如:

a[i] = a[i-1] + a[i-2]

意思:

第i个 = 前两个推出来


3、递推的顺序

必须:

先算小的
再算大的

不能跳着算


💻 第四章:最基础递推模板

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    int a[100];

    // ① 初始值
    a[1] = 1;
    a[2] = 1;

    // ② 递推
    for(int i = 3; i <= n; i++)
    {
        a[i] = a[i-1] + a[i-2];
    }

    // ③ 输出
    cout << a[n];

    return 0;
}

🌈 第五章:故事例题1《爬楼梯的小朋友》

1、小明要爬楼梯 🧒

(1)每次可以:

走1步

走2步


(2)问:

爬到第n级,有多少种方法?


2、我们画图:

(1)画一画

第1级: 1                                                                        1种

第2级:1+1     2                                                              2种

第3级:1+1+1   1+2   2+1                                               3种

第4级:1+1+1+1   1+2+1   2+1+1   1+1+2     2 + 2        5种


(2)找规律:

f[n] = f[n-1] + f[n-2]

(3)因为:

最后一步:

可能从 n-1 来
可能从 n-2 来


3、参考程序

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    int f[100];

    f[1] = 1;
    f[2] = 2;

    for(int i = 3; i <= n; i++)
    {
        f[i] = f[i-1] + f[i-2];
    }

    cout << f[n];

    return 0;
}

🌈 第六章:故事例题2《存金币的小猪》

1、小猪每天存金币 🐷

(1)第1天:存1个
         以后每天比前一天多存2个


(2)问第n天存多少?


2、填表格:

1   1+2=3   3+2= 5   5+2=7   7+2=9

这是一个等差数列!


3、递推公式:

a[i] = a[i-1] + 2

4、核心程序:

a[1] = 1;

for(int i=2;i<=n;i++)
{
    a[i] = a[i-1] + 2;
}

🌈 第七章:故事例题3《会繁殖的细菌》

1、细菌每天:

变成昨天的3倍


2、递推公式:

a[i] = a[i-1] * 3;

🌟 第八章:递推万能模板

int a[100];

a[1] = 初始值;

a[2] = 初始值;

for(int i = 2; i <= n; i++)
{
    a[i] = 用 a[i-1] 或 a[i-2] 计算;
}

🌟 第九章:递推和普通循环的区别

1、普通循环:

只是重复


2、递推:

👉 用“以前的结果”


3、例如:

(1)普通循环:

for(int i=1;i<=n;i++)
{
    cout<<i;
}

(2)递推算法:

a[i] = a[i-1] + 5;

使用递推公式,生成新的结果,用到了上一轮刚刚生成的结果。


 第十章:GESP考试最常见递推类型

类型1:每次加

a[i]=a[i-1]+k;

类型2:每次乘

a[i]=a[i-1]*k;

类型3:前两个相加

楼梯问题、兔子问题

a[i]=a[i-1]+a[i-2];

⭐⭐⭐⭐⭐考试最爱


类型4:平方递推

a[i]=a[i-1]*a[i-1];

第十一章:小学生记忆口诀 🎵

递推递推不要猜
前面结果推出来

先有开始第一项
再用公式往后排

🌟 第十二章:图解理解

想象:

a[1] → a[2] → a[3] → a[4] → a[5]
  ↓      ↓      ↓      ↓
开始   推出    推出   推出

像多米诺骨牌一样倒下


🌟 第十三章:GESP考试标准递推模板

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin>>n;

    int a[1000];

    a[1]=...;
    a[2]=...;

    for(int i=3;i<=n;i++)
    {
        a[i]=...;
    }

    cout<<a[n];

    return 0;
}

🌟 第十四章:一句话总结

递推就是:

👉 用过去,推未来

就像是

🌱种子 、小苗 、变大树

一步一步长出来


转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_60445850/article/details/158539623

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--