Professional Documents
Culture Documents
}
Em chưa biết thực hiện đếm số phép toán đệ quy ạ, liệu nó có cộng dồn ko ạ ?
T(n) = 2^n + … => O(n)= log2(n) ?
1.2Code sử dụng vòng lặp:
#include <iostream>
using namespace std;
int Fb(int n)
{
int a1 = 1, a2 = 1; //1
if (n == 1 || n == 2) //1
return 1; //1
int i = 3, a; //1
while (i <= n) // n-1
{
a = a1 + a2; //
a1 = a2; //
a2 = a; //4 lệnh này * n-2
i++; //
}
return a; //1
}
int main()
{
int n, i, d = 0; //1
cout << "nhap n: ";//1
cin >> n; //1
for (i = 0; i <= n; i++) //n+2
if (n == Fb(i)) //
{
d++; // 2* n+1
}
if (d == 1) cout << n << " thuoc day fibonacci"; //1
else cout << n << " khong thuoc day fibonacci"; //1
}
T(n) = 2n+7
3.1 code min max bằng đệ quy input :1, 7, 3, 4, 5, 6 ; output : max :7 min :1
#include <iostream>
using namespace std;
int main()
{
int arr[] = { 1, 7, 3, 4, 5, 6 };
int a = max(arr, 6);
int b = min(arr, 6);
cout << a << endl << b << endl;
return 0;
}
3.2 max min bằng vòng lặp for
#include<iostream>
using namespace std;
int main()
{
int arr[] = { 1, 7, 3, 4, 5, 6 }; //1
int min = arr[0], max = arr[0]; //1
for (int i = 0; i < 6; i++) { //7
if (max < arr[i]) //
max = arr[i]; //
else if (min > arr[i])// 4* 6 =24
min = arr[i]; //
}
cout << max << endl << min << endl; //1
return 0; //1
}
T(n) =25
Nhận xét : hàm đệ quy theo dự đoán sẽ cộng dồn và rất tốn bộ nhớ nên không
được ưu tiên sử dụng như vòng for.