蓝桥杯c语言学习——递归以及比赛的时空复杂度
一、递归:
1、概念:
递归是指函数直接或间接调用自身的过程。
2、解释递归的两个关键要素:
基本情况(递归终止条件):递归函数中的一个条件,当满足该条件时,递归终止,避免无限递归。可以理解为直接解决极小规模问题的方法。
递归表达式(递归调用):递归函数中的语句,用于解决规模更小的子问题,再将子问题的答案合并成为当前问题的答案。
#include<stdio.h>
const int N = 100; // 补充原代码缺失的数组大小定义
int a[N];
int df(int dep){
int res;
res=1;
for(int i=1;i<=a[dep-1]/2;i++){
a[dep]=i;
res+=df(dep+1);
}
return res;
}
int main(){
int n;
scanf("%d",&n);
a[1]=n;
printf("%d",df(2));
}
二、时空复杂度
1、时间限制到底是什么意思?
比赛中,每道题都有时间限制:
2、空间限制是什么?
每道题还会限制你能用多少内存,比如:
64MB、128MB、256MB、512MB等
快速换算:
1个 int = 4字节
100万个 int = 4MB
如果你开了一个 int a[100000000] (1亿个int),就需要400MB
如果题目只给256MB,你就会得到"Memory Limit Exceeded (MLE)"
3、复杂度表示方法
大O记号 - 你只需要懂这一个!
在竞赛中,几乎只用大O记号,写作 O(f(n))。
4、时间复杂度详解

三、竞赛心得与建议
1、见到题目如何快速估算复杂度

2 、常见算法的复杂度速查表


浙公网安备 33010602011771号