递归调用与时间复杂度的学习总结

来源:互联网 发布:dota2 7.07 知乎 编辑:程序博客网 时间:2024/05/19 13:18

今天主要学习了两个知识点。分别是递归调用和时间复杂度。重点是时间复杂度,比较复杂奋斗

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)。
原创粉丝点击