OIer/C++基础-把高中数列和递推/递归结合起来学?

嗨害嗨本蒟蒻又来水文章辣

前言

有些学校会提前发数学书;正常我是不看的,不过既然学校发了选修就看看吧......

这两天给学校当**乙方敲PPT,考虑到自己在班里(年组的地位还是很高的)跟人形犬类生物没有区别,所以这完完全全就是个摸鱼摸一下午的活,所以又到了我们喜闻乐见的摸鱼的同时文的时间

最近还开了选必二第四章,高中数列其实可以打表做,就是有点费时间,百无聊赖打表的时候想出来了个鬼点子:用数列的方法学递推/递归或用递推/递归的方法学数列会发生什么呢?

所以我又有了水文章的素材,话不多说我们发车吧

使用教材为《深入浅出程序设计竞赛基础版》《普通高中数学教科书 人教A版 选择性必修二》

有些地方会不严谨,欢迎指正

1.论递推和递归

其实这两周dp和状态转移方程有点吃多了都快忘了递推递归怎么写了()

所以来谈谈递推和递归罢

浅显易懂的讲,递推和递归的唯一区别就是一个反复调用自身函数,一个在主函数里一个for循环解决问题;但是单论算法时间复杂度来讲的话,递推在运行时间上会稍短于递归,当然抛开数据量谈时间都是耍流氓,大数据用这俩玩意要是不优化还会死的非常惨。。。

以求斐波那契数列第n项的值为例,递推的代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    int a[110]={0};
    a[1]=1;
    a[2]=1;
    cin>>n;
    for(int i=3;i<=n;i++)
        a[i]=a[i-1]+a[i-2];
    cout<<a[n];
    return 0;
}

而递归的代码如下:

#include<bits/stdc++.h>
using namespace std;
int fibo(int x){
    if(x==1||x==2){
        return 1;
    }else{
        return fibo(x-1)+fibo(x-2);
    }    
}
int main(){
    int n;
    cin>>n;
    cout<<fibo(n);
    return 0;
}

相比较一下,其实二者都有自己的优缺点,不过要是把算法套用到真题上的时候还是各自有自己的优点的,所以在实际应用的时候要自己斟酌用哪个,比如洛谷P1002过河卒,你用递归写我敬你是条汉子

2.论高中数列

高中数列也是极其的简单啊(大雾)

看着数列定义想着想着就想到cpp上了

“诶 这不是能用递推写吗”

所以理论成立,实践开始

3.开始结合

就必刷题和我们校内模拟来讲,一些根本不需要过脑子的题直接打表写就行了,比如算数列周期性这些的题就直接去打表看T就可以了,别的东西压根不需要

特别是一些看起来就很像算法里递推式子的东西,你要是懒的话敲几行代码就能解决问题了(比如我前两天做的那个很逆天的1-500模5得3的个数的问题),当然一些特别复杂的一定要注意数学运算和代码运算逻辑的一些不同处

而且有一个逆天的点就是数列单调性可以非常简单的通过递推的定理去一眼看出来(没错就是瞪眼法)所以个人认为递推算法是数列中的一部分(然而这个世界是一个巨大的代数式子)

总而言之递推和递归用来算数列或者把二者的思维结合起来不论是对你的数学还是对你的oi生涯大概都是有帮助的(吧)

结尾

于是我成功的又水了一篇小文

我写文只是为了把我自己的观点表达出来,如果有谬误的地方欢迎各位神犇指导哦,本蒟蒻就是打算挨骂然后涨知识

就酱紫吧,过两天不是很忙了我再看看怎么写篇正经文章

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值