์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์–ธ์ œ ์จ์•ผ ํ•˜๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•œ๋ฐ, ๋˜‘๊ฐ™์€ ๋™์ž‘์„ ์ผ์ •ํ•œ ๊ทœ์น™๊ณผ ๊ฐ„๊ฒฉ์„ ๊ฐ€์ง„ ์ˆ˜๋“ค์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ์„ค์ •ํ•ด์„œ ์–ด๋””์„œ ๋ฉˆ์ถœ์ง€๋ฅผ ์ •ํ•ด์•ผ ๋์—†์ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

 

๋˜ํ•œ, ์žฌ๊ท€ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ด ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉด ์Šคํƒ(Stack) ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ์— ์—ญ์ˆœ์ด ์•„๋‹ˆ๋ผ ์ •์ˆœ์œผ๋กœ ์ถœ๋ ฅ๋˜๊ธฐ๋ฅผ ์˜๋„ํ•œ๋‹ค๋ฉด, ์ฝ”๋“œ์˜ ์ˆœ์„œ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.


1. ์žฌ๊ท€ ํ•จ์ˆ˜๋ž€?

์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ๋ฌธ์ œ๋ฅผ “๋” ์ž‘์€ ๋ฌธ์ œ”๋กœ ์ชผ๊ฐœ์„œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์žฌ๊ท€๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์•Œ์•„์•ผ ํ•œ๋‹ค:

1. ์ข…๋ฃŒ ์กฐ๊ฑด (Base Case)

 • ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ๊ณ„์† ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋‹ค ๋ณด๋ฉด ๋์—†์ด ๋ฐ˜๋ณต๋  ์ˆ˜ ์žˆ๋‹ค.

 ๊ทธ๋ž˜์„œ ์–ด๋””์„œ ๋ฉˆ์ถœ์ง€๋ฅผ ์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ข…๋ฃŒ ์กฐ๊ฑด์€ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ๋ฉˆ์ถ”๊ณ  ๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค

2. ์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ๊ธฐ

๋ฌธ์ œ๋ฅผ ์ ์  ๋” ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ•ด๊ฒฐํ•œ๋‹ค.

๊ฒฐ๊ตญ, ์ž‘์€ ๋ฌธ์ œ๋“ค์ด ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๋งŒ๋‚˜๋ฉด์„œ ๋‹ต์ด ์ ์  ๋งŒ๋“ค์–ด์ง„๋‹ค.

 


์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์˜ˆ: ์ˆซ์ž ์„ธ๊ธฐ

 

๋ฌธ์ œ:

์ˆซ์ž 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ฐจ๋ก€๋กœ ์ถœ๋ ฅํ•˜๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”.

 

public class RecursionExample {
   public static void printNumbers(int n) {
       if (n == 0) { // ์ข…๋ฃŒ์กฐ๊ฑด : n์ด 0์ด๋ฉด ๋ฉˆ์ถค
        return;
       }
       printNumbers(n - 1); // n๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅ(์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ๊ธฐ)
       System.out.println(n); // ์ˆซ์ž ์ถœ๋ ฅ
   }
   
   public static void main(String[] args) {
      printNumbers(5); //1, 2, 3, 4, 5 ์ถœ๋ ฅ
   }
}

 

์žฌ๊ท€์˜ ๋™์ž‘ ๊ณผ์ • (๋‹จ๊ณ„๋ณ„)

 

printNumbers(5)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค:

1. printNumbers(5) → ํ˜ธ์ถœ → printNumbers(4) ํ˜ธ์ถœ

2. printNumbers(4) → ํ˜ธ์ถœ → printNumbers(3) ํ˜ธ์ถœ

3. printNumbers(3) → ํ˜ธ์ถœ → printNumbers(2) ํ˜ธ์ถœ

4. printNumbers(2) → ํ˜ธ์ถœ → printNumbers(1) ํ˜ธ์ถœ

5. printNumbers(1) → ํ˜ธ์ถœ → printNumbers(0) ํ˜ธ์ถœ

6. ์ข…๋ฃŒ ์กฐ๊ฑด์— ๋„๋‹ฌ: n == 0 → ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ  ์ข…๋ฃŒ.

7. ์ด์ œ ์—ญ์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅ:

printNumbers(1)  1 ์ถœ๋ ฅ.

printNumbers(2)  2 ์ถœ๋ ฅ.

printNumbers(3)  3 ์ถœ๋ ฅ.

printNumbers(4)  4 ์ถœ๋ ฅ.

printNumbers(5)  5 ์ถœ๋ ฅ.

 

<  System.out.println(n)์ด ๋ฐ”๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์ด์œ  >
printNumbers(n - 1);โ€‹
์ด ์ค„์€ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฉฐ, ํ˜„์žฌ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๊ณ  n-1์— ๋Œ€ํ•ด ๋จผ์ € ์‹คํ–‰๋˜๋„๋ก ํ•œ๋‹ค.

• ์ฆ‰, printNumbers(n - 1)์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ํ•จ์ˆ˜๋Š” ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค.
• ๋ชจ๋“  ์žฌ๊ท€ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋œ ํ›„์—์•ผ System.out.println(n)์ด ์‹คํ–‰๋œ๋‹ค.

 

 

<ํ•ญ์ƒ ์—ญ์ˆœ์ด ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ - ๋งŒ์•ฝ System.out.println(n)์„ ๋จผ์ € ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? >

1. ์žฌ๊ท€ ํ˜ธ์ถœ ์ „์— ์ž‘์—…์„ ์ˆ˜ํ–‰:
• ํ˜ธ์ถœ ์ „์— ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ฉด, ์žฌ๊ท€ ํ˜ธ์ถœ์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์ž‘์—…์ด ์ •์ˆœ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

์žฌ๊ท€ ํ˜ธ์ถœ ์ „์— ์ถœ๋ ฅํ•˜๋„๋ก ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค.
public static void printNumbers(int n) {
    if (n == 0) { // ์ข…๋ฃŒ ์กฐ๊ฑด
        return;
    }
    System.out.println(n); // ์ˆซ์ž ์ถœ๋ ฅ ๋จผ์ €
    printNumbers(n - 1); // n๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž ์ถœ๋ ฅ
}โ€‹

์ถœ๋ ฅ ๊ฒฐ๊ณผ:
5, 4, 3, 2, 1

2. ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ:
• ํŠน์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์žฌ๊ท€ ๋Œ€์‹  ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์Šคํƒ ๋Œ€์‹  ํ(์„ ์ž…์„ ์ถœ, FIFO)๋ฅผ ์‚ฌ์šฉํ•ด ์ •์ˆœ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
• ์˜ˆ: BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)๋Š” ํ๋ฅผ ์‚ฌ์šฉํ•ด ์ •์ˆœ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

 

< ์žฌ๊ท€๊ฐ€ ์—ญ์ˆœ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ด์œ >

์Šคํƒ์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์žฌ๊ท€๋Š” ์•„๋ž˜ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋œ๋‹ค:

1. ํ˜ธ์ถœ(์Šคํƒ์— ์Œ“์ž„):
   • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, ํ˜ธ์ถœ ์ •๋ณด๊ฐ€ ์Šคํƒ์— ์Œ“์ธ๋‹ค.
   • ์žฌ๊ท€ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ ์กฐ๊ฑด์— ๋„๋‹ฌํ•˜๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์† ์Œ“์ธ๋‹ค.
2. ๋ฐ˜ํ™˜(์Šคํƒ์—์„œ ๊บผ๋ƒ„):
  • ์ข…๋ฃŒ ์กฐ๊ฑด์— ๋„๋‹ฌํ•˜๋ฉด ๋ฐ˜ํ™˜์ด ์‹œ์ž‘๋œ๋‹ค.
  • ์ด๋•Œ ์Šคํƒ์˜ ๋งˆ์ง€๋ง‰์— ์Œ“์ธ ํ˜ธ์ถœ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

์ด ๋•Œ๋ฌธ์— “์žฌ๊ท€ ํ˜ธ์ถœ์ด ๋๋‚œ ๋’ค”์˜ ์ž‘์—…(์˜ˆ: System.out.println(n))์€ ์—ญ์ˆœ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค

 

 

์Šคํƒ์˜ ํŠน์„ฑ(ํ›„์ž…์„ ์ถœ) ๋•Œ๋ฌธ์—, ์žฌ๊ท€ ํ˜ธ์ถœ ์ดํ›„์˜ ์ž‘์—…์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์—ญ์ˆœ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
ํ•˜์ง€๋งŒ ์ž‘์—…์„ ์žฌ๊ท€ ํ˜ธ์ถœ ์ „์— ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ(์˜ˆ: ํ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •์ˆœ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜๋„ ์žˆ๋‹ค.

2. ์žฌ๊ท€์˜ ์›๋ฆฌ ์Šคํƒ(Stack)

์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ์ปดํ“จํ„ฐ์˜ ์Šคํƒ(Stack) ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด ์ž‘๋™ํ•œ๋‹ค.

 

์Šคํƒ์ด๋ž€

  ์Šคํƒ์€ “์ ‘์‹œ๋ฅผ ์Œ“์•„ ์˜ฌ๋ฆฌ๋Š”” ๊ตฌ์กฐ์™€ ๋น„์Šทํ•˜๋‹ค.

ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out):

 ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ์ ‘์‹œ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ„๋‹ค. ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ์ ‘์‹œ๋Š” ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋‚˜๊ฐ„๋‹ค. 

 

 

์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์Šคํƒ ๋™์ž‘:

ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์Šคํƒ์— ์Œ“์ธ๋‹ค.

์ข…๋ฃŒ ์กฐ๊ฑด์— ๋„๋‹ฌํ•˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜์”ฉ ์Šคํƒ์—์„œ ๋น ์ง€๋ฉด์„œ ํ•ด๊ฒฐ๋œ๋‹ค.

 

๊ทธ๋ž˜์„œ ์—ญ์ˆœ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 


3. ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์ข‹์€ ๋ฌธ์ œ

 

์žฌ๊ท€๋Š” ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, ํŠนํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์— ์ ํ•ฉํ•˜๋‹ค:

 

1. ํŒฉํ† ๋ฆฌ์–ผ ๊ณ„์‚ฐ :

n! = n * (n-1)!

 

๋ฌธ์ œ๋ฅผ ์ ์  ์ž‘๊ฒŒ ๋‚˜๋ˆ„๊ธฐ ์‰ฌ์›€.

 

2. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด:

F(n) = F(n-1) + F(n-2)

์ˆ˜์—ด ๊ณ„์‚ฐ ๋ฌธ์ œ.

 

3. ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜: - ๋์ง€์ ๊ณผ ๋‚ด๊ฐ€ ๋ช‡ ๋ฒˆ ๋ฐ˜๋ณตํ• ์ง€ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ. 

์˜ˆ: ๋ฏธ๋กœ ์ฐพ๊ธฐ, ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰(DFS).

 

4. ๋ถ„ํ•  ์ •๋ณต ๋ฌธ์ œ:

ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ ์„œ ํ‘ธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์˜ˆ: ๋ณ‘ํ•ฉ ์ •๋ ฌ, ํ€ต ์ •๋ ฌ).

 


์žฌ๊ท€๋ฅผ ์—ฐ์Šตํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 

1. ํ•ญ์ƒ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๋ช…ํ™•ํžˆ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
   • ์ข…๋ฃŒ ์กฐ๊ฑด์ด ์—†์œผ๋ฉด ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง„๋‹ค.

2. ์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ๋Š” ๋…ผ๋ฆฌ๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.
  • ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ์•ผ ์žฌ๊ท€๊ฐ€ ์ž˜ ์ž‘๋™ํ•œ๋‹ค.

3. ๋ฐ˜๋ณต๋ฌธ๊ณผ ๋น„๊ตํ•˜๋ฉด์„œ ์žฌ๊ท€๋ฅผ ์—ฐ์Šตํ•ด์•ผ ํ•œ๋‹ค.
   • ์žฌ๊ท€์™€ ๋ฐ˜๋ณต๋ฌธ์€ ์„œ๋กœ ๋ฐ”๊ฟ” ์“ธ ์ˆ˜ ์žˆ๋‹ค.

+ Recent posts