今天主要学习了两个知识点。分别是递归调用和时间复杂度。重点是时间复杂度,比较复杂 。
1. 递归函数
1.1题目1:
一共5个人,一个比一个大2岁,最后一个10岁,问第一个多少岁?
首先用循环形式来写函数,如下:
int Age1(int n)//O(n)
{
int tmp = 10;
for(int i=1;i<n;i++)
{
tmp += 2;
}
return tmp;
}
而用递归函数如下:
int Age(int n) //O(n)
{
int tmp;
if(n == 1)//边界条件
{
tmp = 10;
}
else
{
tmp = Age(n-1) + 2;
}
return tmp;
}
但是递归函数的时间复杂度是比循环大的。
2.时间复杂度
如下一段程序:
bool Fun(int n)
{
int i=2;
while((n%i)!=0 && i*1.0<sqrt(n))
{
i++;
}
if(i*1.0>sqrt(n))
return true;
else
return false;
}
现在问:1.这段程序实现什么功能? 2.时间复杂度是多少?答:1.判断一个数是否为素数。
2.时间复杂度为sqrt(n)。