Java Core – Đệ quy trong java

Java Core

– Đệ quy trong java

Bài trước

Bài sau

Đệ quy trong java

Đệ quy trong java là quá trình trong đó một phương thức gọi lại chính nó một cách liên tiếp. Một phương thức trong java gọi lại chính nó được gọi là phương thức đệ quy.

Sử dụng đệ quy giúp code chặt chẽ hơn nhưng sẽ khó để hiểu hơn.

Cú pháp:

returntype methodname() {  
    // code
    methodname();
} 

Ví dụ về đệ quy trong java

Dưới đây là các ví dụ về cách sử dụng đệ quy trong java.

Ví dụ 1: vòng lặp vô tận

public class RecursionExample1 {

	static void p() {
		System.out.println("hello");
		p();
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		p();
	}

}

Kết quả:

NOTE: Sau khi chạy được xong màn hình kết quả này, màn hình kết quả sẽ hiển thị lỗi.

Ví dụ 2: vòng lặp có hạn

public class RecursionExample2 {

	static int count = 0;

	static void p() {
		count++;
		if (count <= 5) {
			System.out.println("hello " + count);
			p();
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		p();
	}

}

Kết quả:

Ví dụ 3: tính giai thừa

public class RecursionExample3 {

	static int factorial(int n) {
		if (n == 1)
			return 1;
		else
			return (n * factorial(n - 1));
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Giai thừa của 5 là: " + factorial(5));
	}

}

Kết quả:

Chương trình trên hoạt động như sau:

factorial(5) 
   factorial(4) 
      factorial(3) 
         factorial(2) 
            factorial(1) 
               return 1
            return 2*1 = 2
         return 3*2 = 6
      return 4*6 = 24
   return 5*24 = 120

Ví dụ 4: dẫy số Fibonacci

public class RecursionExample4 {

	static int n1 = 0, n2 = 1, n3 = 0;

	static void printFibo(int count) {
		if (count > 0) {
			n3 = n1 + n2;
			n1 = n2;
			n2 = n3;
			System.out.print(" " + n3);
			printFibo(count - 1);
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int count = 15;
		System.out.print(n1 + " " + n2); // in 0 và 1
		printFibo(count - 2);// n-2 vì 2 số 0 và 1 đã được in ra
	}

}

Kết quả:

Bài trước

Bài sau