1.计算n!的递归函数如下,分析时间复杂度
int func(int n)
{
if(n<=1)
return 1; //①
else
return n*func(n-1); //②
}
分析:n!递归函数中,①的时间复杂度显然O(1),应主要分析else后的语句②,递归调用func(n-1)的时间开销为T(n-1),则②时间开销就是O(1)+T(n-1) 。
2分析以下程序时间复杂度
void fun()
{
int i=1,k=0,n=10;
while(i<=n-1)
{
k+=10*i;
++i;
}
}
答:可以改写为for(i=1;i<=n-1;++i)
,故时间复杂度为O(n)
3分析以下程序时间复杂度
.void fun(int n)
{
int i=1,k=0;
do
{
k+=10*i;
++i;
}while(i==n)
}
答:i!=n
时跳出循环,如:n=100,i=1,仅循环一次,故时间复杂度O(1)
4.分析以下程序时间复杂度
void fun(n)
{
int i=1,j=0;
while(i+j<=n)
if(i>j)
++j;
else
++i;
}
答,如果1<=n i=1,j=1;
2<=n i=2,j=1 ;
3<=n i=2,j=2 ...
所以时间复杂度O(n)
5.分析以下程序时间复杂度
void fun(int n)
{
int x=n,y=0;
while(x>=(y+1)*(y+1))
++y;
}
答:如果x>=1×1 y=1 ;
x>=2×2 y=2 ... 所以时间复杂度O( n−√n )