Đệ quy
Trịnh Tấn Đạt
Khoa CNTT - Đại Học Sài Gòn
Email: trinhtandat@sgu.edu.vn
Website: https://sites.google.com/site/ttdat88/
1
Đệ quy
Ví dụ
Tính S(n) = n! = 1*2*…*(n-1)*n
Ta thấy S(n) = S(n-1)*n
Vậy thay vì tính S(n) ta sẽ đi tính S(n-1)
Tương tự tính S(n-2), …, S(2), S(1), S(0) = 1
2
*Học sâu hơn ở môn kỹ thuật lập trình
Đệ quy
Nếu hàm đệ quy không có phần này thì hàm sẽ bị lặp vô hạn và sinh lỗi khi thực hiện.
S = 1+2+3+…+n
S(n)= 1+2+…+n
int sum(int n) {
if (n == 1) {
return 1;
}
else {
return sum(n - 1) + n;
}
}
4
Ví dụ
#include <iostream>
using namespace std;
void p() {
cout << "hello" << endl;
p();
}
int main() {
p();
return 0;
}
Vòng lặp vô tận
#include <iostream>
using namespace std;
int factorial(int n) {
if (n == 1) //phần neo
return 1;
else
return (n * factorial(n - 1)); // phần đệ quy
}
int main() {
cout << "Giai thua cua 5 la:" << factorial(5);
return 0;
}
Tính giai thừa n!
Đệ Quy
Bài toán dãy số Fibonacci
F(n)= F(n-1)+F(n-2) (phần đệ quy)
F(n)=1 với n<=2 (phần neo).
Khử đệ quy
Khử đệ quy bằng vòng lặp
Bài tập Viết hàm đệ quy cho các bài toán
Bài tập Viết hàm đệ quy cho các bài toán