三种典型递归形式算法的性能分析:
1、求n的阶乘:
int f(int n){
if(n==1){
return 1;
}
return n*f(n-1);
}
①、子问题的规模下降
②、处理子问题消耗的时间
写出下式:
T(n)=T(n-1)+O(1)
得出:求阶乘的时间复杂度: N个O(1)=> O(N)。
2、打印i到j:
void print(int i,int j){
if(i>j) return;
cout<<i<<" ";
print(i+1,j);
}
T=O(j-i) => O(n)
3、求和:
O(n)
4、翻转字符串:
O(n)
5、斐波那契:
T(n)=T(n-1)+T(n-2)+O(1)=2T(n-1)+O(1) -> 若是3,则3^n
故时间复杂度: T(2^n) 。
6、最大公约数:
m>n, m%n<m/2;
n每两次,折半。 => 2lg(n)
/* 削减1/3 => 2log3(n)
故时间复杂度: O(lg(n))