You are on page 1of 3

I. Định nghĩa.

- Đệ quy hay recursion được định nghĩa như sau đệ là đưa ra, trình ra, quy là quay về. Đệ quy là
một kỹ thuật lập trình trong đó một khái niệm hoặc một phép toán được định nghĩa bằng cách
gọi lại chính nó, hay nói một cách dễ hiểu trong lập trình là một hàm khi nó tự gọi lại chính nó
được gọi là đệ quy. Trong một số trường hợp đệ quy có thể thay thế cho các vòng lặp trong
lập trình.

II. Khi nào chúng ta nên sử dụng đệ quy.


- Đệ quy được tạo ra để giải quyết các vấn đề có thể được chia thành các vấn đề nhỏ hơn, lặp đi
lặp lại.
Ví dụ: Một ví phổ biến nhất để nói về tính ứng dụng của đệ quy là việc tính giai thừa của một
số.
Ta có hàm như sau
factorial(n) {
if(n = 0) {
return 1;
break;
}
return n * factorial(n-1);
}

Khi ta gọi factorial(3)

Ta có thể thấy trong ví dụ trên việc tìm giai thừa được chia nhỏ thành các lần tính giai thừa
nhỏ hơn và lặp lại. Giúp đơn giản và có thể tái sử dụng code.

- Nó đặc biệt tốt để làm việc trên những thứ có nhiều nhánh khả thi và quá phức tạp đối với một
cách tiếp cận lặp đi lặp lại.
Ví dụ: Một trong những ứng dụng lớn nhất của đệ quy để thay thế cho các vòng lặp đó là sử
dụng đệ quy để duyệt cây.
Trong trường hợp này nếu chúng ta sử dụng vòng lặp for, thì số lượng vòng lặp sẽ phụ thuộc
vào số tầng của cây, trong trường hợp trên chúng ta cần đến 5 lần duyệt để có thể duyệt hết
các phần tử trong toàn bộ cây. Việc này sẽ khó khăn và chậm hơn rất nhiều nếu chúng ta sử
dụng 1 cây có nhiều tầng hơn.

Mọi chuyện sẽ đơn giản hơn nếu chúng ta dùng đệ quy (Inorder)

private void inOrder(TreeNode node) {


if (node == null) {
return;
}
inOrder(node.left);
if(node.data != null){
System.out.printf(node.data);
}
inOrder(node.right);
}
Trong trường hợp này khi ta sử dụng đệ quy sẽ chia nhỏ ra các lần duyệt L N R, và lặp đi lặp
lại, giúp đơn giản hóa bài toán và dễ đọc code hơn.
- Vậy chúng ta có nên sử dụng đệ quy thay thế hoàn toàn cho loop hay không ?

Giống với bất kì kỹ thuật nào, chúng ta sẽ phải biết sử dụng đệ quy đúng lúc, đúng chỗ. Đệ
quy là một công cụ hữu ích, những nó sẽ làm gia tăng mức sử dụng bộ nhớ. Trong một số
trường hợp sẽ gây ra hiện tượng stack overflow.

Trong một số trường họp, việc sử dụng đệ quy cho ra độ phức tạp thuật toán cao hơn
việc sử dụng vòng lặp.

You might also like