본문 바로가기
기초 및 언어/▶ Java&JSP

13. 재귀호출

by 류딩이 2025. 8. 18.

 

public class Ex07_재귀호출 {

	public static void main(String[] args) {
		show(3); // 호출
	}
	
	public static void show(int cnt) { // 정의
		System.out.println("cnt : " + cnt);
		if (cnt == 1)
			return;   // 종료 조건

		show(--cnt); // 재귀 호출
	}

}

 

실행 과정 (호출 순서)

1. main 시작

  • show(3) 호출
  • → cnt=3

2. show(3) 실행

  • 출력: cnt : 3
  • cnt == 1? → ❌ (3이므로 통과)
  • --cnt 실행 → cnt 값이 2로 감소
  • show(2) 호출

show(2) 실행

  • 출력: cnt : 2
  • cnt == 1? → ❌ (2이므로 통과)
  • --cnt 실행 → cnt 값이 1로 감소
  • show(1) 호출

show(1) 실행

  • 출력: cnt : 1
  • cnt == 1? → ✅
  • return → 메서드 종료

호출 흐름을 스택처럼 표현

main()
 └─ show(3)
      └─ show(2)
           └─ show(1) → return
cnt : 3
cnt : 2
cnt : 1

 

 

 

재귀호출2

import java.util.Scanner;

public class Ex08_재귀호출 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.print("숫자1 :");
		int num1 = sc.nextInt();

		System.out.print("숫자2 :");
		int num2 = sc.nextInt();

		int result = recursive(num1, num2); // 메서드 호출
		System.out.println("result:" + result);

	}

	public static int recursive(int num1, int num2) { // 메서드 정의
		if(num2 ==0)
			return 1;
		else
			return num1 * recursive(num1, num2-1);
	}
}

 

1. main 시작

  • rec(2, 3) 호출
  • rec(2, 3)→ 메서드 정의로 이동

2. rec(2, 3) 실행

  • if문 
  • num2 == 0? → ❌ (3이므로 통과)
  • num1 * rec(2, 2)
  • rec(2, 2) 호출

3. rec(2, 2) 실행

  • if문
  • num2 == 0?  → ❌ (2이므로 통과)
  • num1 * red(2,1)
  • rec(2, 1)호출

4. rec(2, 1) 실행

  • if문
  • num3 == 0? → ❌ (1이므로 통과)
  • rec(2, 0)호출

5. rec(2, 0) 실행

  • if문
  • num3 == 0? → 0 (1이므로 통과) ✅
  • return = 1 메서드 종료

리턴 언와인딩 과정

  • recursive(2,0) → 1 반환
    👉 이게 바로 “마지막 return 1”입니다.
  • 이제 이 값이 윗 단계로 전달돼요:
    • recursive(2,1) = 2 * (recursive(2,0)) = 2 * 1 = 2
    • recursive(2,2) = 2 * (recursive(2,1)) = 2 * 2 = 4
    • recursive(2,3) = 2 * (recursive(2,2)) = 2 * 4 = 8

핵심

  • return 1 값은 rec(2,0)의 결과로 반환됩니다.
  • 그 결과가 바로 **rec(2,1)**의 곱셈에 들어가고, 차례차례 위로 올라가면서 계산이 완성돼요.

 

 

'기초 및 언어 > ▶ Java&JSP' 카테고리의 다른 글

15. 오버로딩  (1) 2025.08.18
14. Math  (2) 2025.08.18
12. 변수  (1) 2025.08.18
11. 배열넘기기  (0) 2025.08.18
10. 클래스  (3) 2025.08.14