递归:问题的规模要缩小,有边界条件,通过返回段回去
eg:
#include <stdio.h>
int Age(int n)
{
int tmp;
if(n==1)
tmp=10;
else
tmp=Age(n-1)+2;
return tmp;
}
时间复杂度:执行一个算法,代码运行的次数和问题规模之间的函数关系,用O()表示。
eg:
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
a[i][j]=0;
}
1:n
2:n+n+n+…+n=n^2
3:n^2等同2
f(n)=n+2n^2=2 n^2
O(f(n))=O(n^2)
空间复杂度:执行一个算法,需要额外的辅助空间和问题规模之间的函数关系,用O()表示。
int Fibno(int n)
{
if(n==1||n=2)
return 1;
else
return Fibno(n-1)+Fibno(n-2);
}
此程序不适合用递归算法,因为时间复杂度较高。