Phương thức đệ quy trong Java là một trong các khái niệm cơ bản và nó được áp dụng rất nhiều trong khi lập trình bởi tính linh hoạt của nó. Trong bài viết này, ta sẽ cùng tìm hiểu về khái niệm, những ưu điểm và nhược điểm của nó.
Phương thức đệ quy
Trong Java, một phương thức tự gọi chính nó được gọi là phương thức đệ quy. Và, quá trình này được gọi là đệ quy. Ví dụ khi ta đặt một chiếc gương A song song với chiếc gương B. Bất kỳ một vật thể nào giữa 2 chiếc gương này sẽ được phản chiếu đến vô cùng.
Cách triển khai
1 2 3 4 |
phep_cong(){ … phep_cong(); } |
Trong ví dụ trên, chúng ta đã gọi phương thức phep_cong() từ bên trong phương thức Main. Và, bên trong phương thức phep_cong(), chúng ta lại gọi cùng một phương thức phep_cong(). Đây chính là phương thức đệ quy. Để dừng lời gọi đệ quy, chúng ta cần cung cấp một số điều kiện bên trong phương thức đó. Nếu không, phương thức sẽ được gọi vô hạn. Do đó, chúng ta sẽ sử dụng câu lệnh if...else (hoặc cách tiếp cận tương tự) để kết thúc lệnh gọi đệ quy bên trong phương thức.
Ví dụ: Thực hiện phép cộng 10 số tự nhiên đầu tiền
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Main { static int phep_cong(int n) { if (n != 0) return n + phep_cong(n-1); else return 0; } public static void main(String[] args) { int a = 10, kq; kq = phep_cong(a); System.out.println(kq); } } |
Kết quả:
1 |
55 |
Trong ví dụ trên, chúng ta có một phương thức có tên là phep_cong. Phep_cong() được gọi từ phương thức main() với biến số được truyền. Ta có câu lệnh
1 |
return n + phep_cong(n-1); |
Phương thức phep_cong() đang tự gọi chính nó. Ban đầu, giá trị của n là 10 bên trong phep_cong(). Trong lần gọi đệ quy tiếp theo, 9 được chuyển tới phương thức phep_cong(). Quá trình này tiếp tục cho đến khi n bằng 0 thì hàm phep_cong() sẽ ngừng gọi và trả về giá trị 0. Cách thức hoạt động của chương trình trên sẽ được biểu diễn trong hình bên dưới như sau.
Ưu điểm và nhược điểm của phương thức đệ quy
- Khi một lời gọi đệ quy được thực hiện, các vị trí lưu trữ mới cho các biến được cấp phát trên ngăn xếp. Khi mỗi lời gọi đệ quy trả về, các biến và tham số cũ bị xóa khỏi ngăn xếp. Do đó, đệ quy thường sẽ sử dụng nhiều bộ nhớ hơn.
- Tuy nhiên, giải pháp đệ quy sẽ đơn giản hơn nhiều và tốn ít thời gian hơn để viết các đoạn mã, dễ gỡ các lỗi và duy trì.
Như vậy chúng ta đã tìm hiểu về các khái niệm và ví dụ cơ bản về phương thức đệ quy trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài mới nhất trên tek4 nhé!
P/s: Cảm ơn mọi người!