一、书本笔记
1、逻辑结构和储存结构
顺序结构 ---数组类型
/
储存结构
\
链式结构 ---指针类型
2、抽象数据类型ADT
数据抽象 数据封装 继承性 动态性
没有初始条件可不写
抽象数据类型的特征:实现与操作分离,从而实现封装。
(我感觉就是 一个容器封装起来 集合之类的 里面有能用的方法 方法类似面向过程的函数)
3、算法
· 时间复杂度
问题规模 --- 不关注具体数值 而是数量级
· 空间复杂度
(这里我电脑运行PrintN 循环和递归比较 循环很大的数也可以继续 可是递归10000可以100000就不行了
递归
#include<stdio.h> #include<iostream> void PrintN(int n); int main() { int n; scanf("%d",&n); PrintN(n); return 0; } void PrintN(int n) { if(n) { PrintN(n-1); printf("%d\n",n); } }
循环
#include<iostream> using namespace std; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cout<<endl<<i; } return 0; }
最后找到的我电脑临界是 no 64909 yes64908
看递归 每次调上一次的n-1 这样就要先储存这个n这次的程序 然后再n-1 n-2 ... 再到最好是1 再返回去到n 这样对内存的消耗是很大的
这说明当问题规模变大时 递归这种方法就比循环的空间复杂度要更大 因而问题规模变大 循环的PrintN要好一点)
原文:https://www.cnblogs.com/drgnibasaw/p/12545281.html