- Code:
-
#include<stdio.h>
#include<conio.h>
long fbc_1(int n);
long fbc_2(int n);
void main()
{
clrscr();
printf("************************************************** *****************");
int n,i;
do {
printf("\nNhap n: ");
scanf("%d",&n);
}
while (n<=0);
for (i=0;i<=n;i++) printf("%ld\t",fbc_2(i));
getch();
}
long fbc_1(int n)
{
if (n<=2) return 1;
else return (fbc_1(n-2)+fbc_1(n-1));
}
long fbc_2(int n)
{
if (n<=2) return 1;
int i;
int t1=1,t2=1,t3;
for (i=3;i<=n;++i)
{
t3 = t1 +t2;
t1 = t2;
t2 = t3;
}
return t3;
}
+ Phân tích độ phức tạp của fbc_1:
B1: Xác định phép toán tích cực:
F := F(N – 2) + F(N – 1)
B2: Số lần gọi thực hiện hàm F:
2*(1 + 1 + … + 1) = 2* N – 4 (lần)
B3: Kết luận độ phức tạp của fbc_1 là:
T(N) = O(N)
+ Phân tích độ phức tạp của fbc_2
B1: Xác định phép toán tích cực:
Fibn := Fib1 + Fib2; Fib1 := Fib2; Fib2 := Fibn;
B2: Xác định số lần thực hiện của phép toán tích cực:
1 + 1 + … + 1 = N – 2 (lần)
B3: Kết luận độ phức tạp của fbc_2 là: T(N) = O(N)
*******Nhận xét********
Độ phức tập của fbc_1 lớn hơn fbc_2