怎麼描述一個算法的優劣呢
使用斐波那契數列
的 遞歸
和非遞歸算法進行討論.
斐波那契數列
的結構是這樣: ,即如圖所示 算法
相應算法(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 | ![]() |
![]() |