?目的主要是为了比较一下递归和非递归的运行时间的差异,但是由于数的限制,当输入的数超出限制了,程序就可能无法运行.
在这里面会使用到C语言库函数time.h
.返回类型为t实际为long
.clock()函数是可以计算从开始执行程序到程序结束的时间的,返回时间是毫秒
.
#include<stdio.h>
#include<time.h>
int main()
{
clock_t start_time,end_time;
start_time=clock();//开始时间
//这里面写要测试的程序
a=1;b=2;
c=a+b;
end_time=clock();//结束时间
printf("%.2f",(double)(start_time-end_time));
return 0;
}
比较代码:?
#include<stdio.h>
#include<time.h>
//非递归算法
long Fibno(int n)
{
?? ?if(n==1)
?? ? return 1;
?? ?else if(n==2)
?? ? return 1;
?? ?long f1,f2,f3;
?? ?f1=1,f2=1;
?? ?for(int i=3;i<=n;i++){
?? ??? ?f3=f2+f1;
?? ??? ?f1=f2,f2=f3;
?? ?}
?? ?return f3;
}
//递归算法
long Fib(int n)
{
? ? if(n==1)
? ? ? ? return 1;
? ? else if(n==2)
? ? ? ? return 1;
? ? else
? ? ? ? return Fibno(n-1)+Fibno(n-2);
}
//功能实现函数
void suanfa(int n,int m)
{
? ? int end=0;
? ? clock_t start_time,end_time;
? ? if(m==1){
? ? ? start_time=clock();
? ? ? end=Fibno(n);
? ? ? end_time=clock();
? ? ? printf("%d\n",end);
? ? ? printf("请输入非递归算法时间: %lf\n",(double)(end_time-start_time));
? ? }else{
? ? ? start_time=clock();
? ? ? end=Fib(n);
? ? ? end_time=clock();
? ? ? printf("%d\n",end);
? ? ? printf("请输入递归算法时间: %lf\n",(double)(end_time-start_time));
? ? }
}
int main()
{
?? ?int n,choice;
?? ?printf("请输入要测试的数据和选择的算法\n");
?? ?scanf("%d %d",&n,&choice);
?? ?suanfa(n,choice);
?? ?return 0;
}
|