蓝桥杯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、时间复杂度详解
image

三、竞赛心得与建议
1、见到题目如何快速估算复杂度
image
2 、常见算法的复杂度速查表
image

posted @ 2025-12-03 14:45  Nuyoah%  阅读(12)  评论(1)    收藏  举报