怎么描述一个算法的优劣呢
使用斐波那契数列的 递归和非递归算法进行讨论.
斐波那契数列的结构是这样: ,即如图所示
相应算法(c语言)
- 递归展示
int recursion_fibonacci(int n)
{
if (n == 0)return 1;
if (n == 1)return 1;
return recursion_fibonacci(n - 1) + recursion_fibonacci(n - 2);
}
- 非递归展示
void nonrecursion_fibonacci(int n)
{
int Fn = 1, Fn_1 = 1, Fn_2 = 1;
if(n>2)
{
for(int i = 2;i<=n;i++)
{
Fn = Fn_1 + Fn_2;
Fn_2 = Fn_1;
Fn_1 = Fn;
}
}
printf("数值是%d", Fn);
}
- 完整算法
#include <stdio.h>
#include <time.h>
int recursion_fibonacci(int n)
{
if (n == 0)return 1;
if (n == 1)return 1;
return recursion_fibonacci(n - 1) + recursion_fibonacci(n - 2);
}
int nonrecursion_fibonacci(int n)
{
int Fn = 1, Fn_1 = 1, Fn_2 = 1;
if(n>2)
{
for(int i = 2;i<=n;i++)
{
Fn = Fn_1 + Fn_2;
Fn_2 = Fn_1;
Fn_1 = Fn;
}
}
printf("数值是%d", Fn);
}
int main(void)
{
clock_t start, end;
start = clock();
printf("数值是%d", recursion_fibonacci(5));
nonrecursion_fibonacci(5);
end = clock();
printf("执行速度%6.3fs", (double)(end-start)/ CLOCKS_PER_SEC);
return 0;
}
- 算法复杂度比较
| 函数 | 时间复杂度 | 空间复杂度 |
|---|---|---|
| recursion | ||
| nonrecursion |