如何知道函数运行需要多长时间呢?头文件ctime里面提供了一个函数:
clock_t clock();//# define long clock_t
该函数返回的是从程序开始运行到调用clock函数时所打的点数,
即clock tick(时钟打点);
有一个常数CLK_TCK,是机器时钟每秒所走的时钟打点数,是这样定义
的,//#define CLK_TCK CLOCKS_PER_SEC
//# define CLOCKS_PER_SEC 1000
所以,定义两个clock的变量Begin,End;然后在要测试的函数前后分别调
用clock函数就可以得出时钟打点数,再除以CLK_TCK就得到时间了,代码如下:
# include<iostream>
# include<ctime>
using namespace std;
clock_t Begin, End;
double duration;
//typedef long clock_t
# define N 10000
void fun1(int);
void fun2(int);
int main()
{
Begin = clock();//开始计时
//====================这里写要测试的代码===================
fun1(100);
//=========================================================
End = clock();//结束计时
duration = double(End - Begin)/CLK_TCK;//duration就是运行函数所打的
//点数,CLK_TCK是每秒所打点数
cout << "tick=" << double(End - Begin) << endl;
cout << "duration=" << duration << endl;
return 0;
}
void fun1(int n)//普通输出
{
for (int i = 0; i <= n; i++)
cout << i << endl;
}
void fun2(int n)//递归
{
if (n)
{
fun2(n - 1);
cout << n << endl;
}
else cout << 0 << endl;
}
这两个函数都是输出0到n,如图
递归虽然时间复杂度较小,但是却是非常耗费空间的,因为它要一层一层展开,知道函数执行完毕,这是很恐怖的,比如N设为十万,百万,等等,这时系统空间不够用了,自然就会崩溃!
因为函数1占用空间非常小,所以虽然时间慢了点,但还是可以执行
看,这里直接就崩溃了