1.前进(规模缩小),边界条件,返回段。
2.自己调用自己
求阶乘 n!=n*(n-1)!
int Fac(int n)
{
int tmp=0;
if(n==1||n==0)
tmp =1;
else
tmp=n*Fac(n-1);
return tmp;
}
求和:int sum (int n)
{
int tmp=0;
if(n==1)
tmp=1;
tmp=n+sum(n-1);
return tmp;
}
时间复杂度:实现一个算法,语句的执行次数和问题规模之间的函数关系。
for(int i=0;i<n;i++) n
{ n+n=2n,,,但是不保留系数。
printf("%d\n",i); n
}
时间复杂度 n,O(f(n))=O(n).
for(i=1;i<=n;++i) //1
for(j=1;j<=n;++j) //2
{
c[i][j]=0; //3
1:n
2=n^2 2n^2+n=n^2
3 n^2
//1只保留高阶项。
2 不保留系数。
O(1):常数条语句
for(i=2;i<=n;++1)
for(j=2;j<i-1;++j)
{++x;a[i,j]=x;)
1+2+3+.....+n-2=(n-1)*(n-2)/2=n^2
(首项+末项)*项数/2
递归的时间复杂度:计算调用的次数和问题规模的函数关系
int Fun(int n) //0(n)
{
if(n<=1)
return n;
else
return Fun(n+1)+1;
for(int i=1;i<n;i*=2)//
{
arr[i]=0;
}
1,2,3,4,5,6,7,8,9,,,nx
2^x=n->x=log2n=logn
O(log2n)