今天我们来比较斐波那契数列递归非递归两种方式的运行时间!!!(由于数据类型长度的限制,只能运行到103)
代码如下:
递归函数:
long long fib(int n)
{
if (n == 1) return 1;
if (n == 2) return 1;
return fib(n - 1) + fib(n - 2);
}
递归计算运行时间全代码:
#include<stdio.h>
#include<time.h>
long long fib(int n)
{
if (n == 1) return 1;
if (n == 2) return 1;
return fib(n - 1) + fib(n - 2);
}
int main()
{
double time;
clock_t start, finish;
int n;
long long x;
scanf("%d",&n);
start = clock();
x = fib(n);
finish = clock();
time=(double)(finish - start) / CLOCKS_PER_SEC;//计算运行时间
printf("%lld\n", x);
printf("time=%lf秒\n", time);
return 0;
}
非递归函数:
long long Fib(int n)
{
if (n == 1) return 0;
if (n == 2) return 0;
long long f1, f2, f3;
f1 = 1, f2 = 1;
for (int i = 3; i <= n; i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
非递归计算运行时间全代码:
#include<stdio.h>
#include<time.h>
long long Fib(int n)
{
if (n == 1) return 0;
if (n == 2) return 0;
long long f1, f2, f3;
f1 = 1, f2 = 1;
for (int i = 3; i <= n; i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
int main()
{
double time;
clock_t start, finish;
int n;
long long x;
scanf("%d",&n);
start = clock();
x = Fib(n);
finish = clock();
time=(double)(finish - start) / CLOCKS_PER_SEC;//计算运行时间
printf("%lld\n", x);
printf("time=%lf秒\n", time);
return 0;
}