🌈 [Section2] 1. μž¬κ·€ν•¨μˆ˜

ν˜„μ£ΌΒ·2022λ…„ 9μ›” 20일
0

bootcamp

λͺ©λ‘ 보기
20/71

πŸ“• 였늘 배운 λ‚΄μš©!

  • μž¬κ·€ν•¨μˆ˜

✏️ μž¬κ·€ν•¨μˆ˜ (Recursion)

  • ν•¨μˆ˜ λ‚΄μ—μ„œ 자기 μžμ‹ μ„ λ‹€μ‹œ ν˜ΈμΆœν•˜λŠ” 것
    ➜ μžκΈ°μžμ‹ μ„ 계속 λ‹€μ‹œ ν˜ΈμΆœν•˜λ‹€λ³΄λ‹ˆ 반볡이 됨

  • recursion() λ©”μ„œλ“œ ν˜ΈμΆœν•˜λ©΄ 첫 싀행문이 λ‹€μ‹œ ν˜ΈμΆœλ˜μ–΄ 계속 반볡

  • λͺ¨λ“  μž¬κ·€ν•¨μˆ˜λŠ” 반볡문(for/whileλ¬Έ)으둜 μ“Έ 수 있음

  • Base case : κ°€μž₯ μž‘μ€ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μ½”λ“œ & μž¬κ·€λ₯Ό λ©ˆμΆ”λŠ” μ½”λ“œ
    ( 문제λ₯Ό 더이상 μͺΌκ°€ 수 μ—†λŠ” 경우 )

  • Recursive case : λ°°μ—΄μ˜ 첫 μš”μ†Œ + λ‚˜λ¨Έμ§€ μš”μ†Œκ°€ λ‹΄κΈ΄ 배열을 λ°›λŠ” ν•¨μˆ˜
    (자기 μžμ‹ μ„ 계속 반볡 호좜 ν•˜μ—¬ 문제λ₯Ό μž‘κ²Œ μͺΌκ°œλ‚˜κ°€λŠ” μ½”λ“œ)

but, λ©”λͺ¨λ¦¬λ„ λ„ˆλ¬΄ 많이 μ‚¬μš©ν•˜κ³  μ½”λ“œμ˜ 흐름을 μ˜ˆμΈ‘ν•˜κΈ° λ„ˆλ¬΄ νž˜λ“€κΈ° λ•Œλ¬Έμ— μ„œλΉ„μŠ€ λ‘œμ§μ„ μ‚¬μš©ν•  κ²½μš°μ—λŠ” 잘 μ•ˆμ”€ (λ‚˜μ€‘μ— 배울 문법을 μœ„ν•΄ λ°°μš°λŠ” 것)


Ex. num을 λ§€κ°œλ³€μˆ˜λ‘œ 가진 sumμ΄λΌλŠ” λ©”μ„œλ“œκ°€ 있고, 1λΆ€ν„° numκΉŒμ§€μ˜ 합계λ₯Ό ꡬ해야 ν•  κ²½μš°μ—

static int sum (int num) { //1λΆ€ν„° num에 λ“€μ–΄κ°ˆ μˆ«μžκΉŒμ§€μ˜ 합계λ₯Ό ꡬ할건데
	if (num == 1) return 1; //Base case //λ§Œμ•½ num이 1이면 1λ¦¬ν„΄ν•˜κ³ 
    else return num + sum(num - 1);
    //Recursive case
    //아닐 경우 Sum 의 첫번째 μš”μ†Œ + 첫 μš”μ†Œ μ œκ±°ν•˜κ³  Sum 의 λ‚˜λ¨Έμ§€ μš”μ†Œκ°€ λ‹΄κΈ΄ 것
} 

⬆️ μœ„ μ‹μ—μ„œ λ§Œμ•½ num = 5 라고 ν•œλ‹€λ©΄,

λ©”μ„œλ“œ μ•ˆμ— 쑰건식이 없을 경우 κ·Έλƒ₯ sum(5) λŒ€μž…ν•˜κ³  num을 좜λ ₯ν•œλ‹€λ©΄ μ›λž˜λŠ” κ·Έλƒ₯ 5κ°€ 좜λ ₯됨

ν•˜μ§€λ§Œ 밑에 쑰건식을 보면 else 뢀뢄에 sum(5)일 경우 ➜ 5 + sum(4) λ₯Ό 뢈러였래

μ—¬κΈ°μ„œ sum(4)λŠ” λ‹€μ‹œ μ € μ‹μ˜ num에 4λ₯Ό λŒ€μž…ν•œ 것과 κ°™κΈ° λ•Œλ¬Έμ— 4 + sum(3)이 됨

μ΄λ ‡κ²Œ 3 + sum(2) / 2 + sum(1) 둜 점점 μͺΌκ°œμ§€λ‹€κ°€ num이 1이 되면

μœ„μ— ifλ¬Έμ—μ„œ 이 식을 λ©ˆμΆ”κΈ° μœ„ν•΄ 쑰건으둜 1을 λ¦¬ν„΄ν•˜λΌκ³  λ˜μ–΄μžˆμŒ
➜ else 쑰건식 κ±΄λ„ˆλ›°κ³  1 λ°˜ν™˜

➜ 결ꡭ은 μ­‰ μžκΈ°μžμ‹ λ“€μ΄ 더해져 5 + 4 + 3 + 2 + 1 이 λ˜λŠ” 것


βœ” μž¬κ·€ν•¨μˆ˜ μž₯점

  • μ½”λ“œκ°€ κ°„κ²°

  • μˆ˜μ •μ΄ 용이

  • λ³€μˆ˜ μ—¬λŸ¬κ°œ μ‚¬μš©ν•  ν•„μš” X

βœ” μž¬κ·€ν•¨μˆ˜ 단점

  • μ½”λ“œμ˜ 흐름 λ°”λ‘œλ‘œ νŒŒμ•…ν•˜κΈ° 어렀움

  • 반볡적으둜 λ§€μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ μ§€μ—­λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, λ°˜ν™˜κ°’μ„ λͺ¨λ‘ process stack에 μ €μž₯ν•˜κ²Œ λ˜λŠ”λ° 이 과정이 λ°˜λ³΅λ¬Έμ— λΉ„ν•΄ λ©”λͺ¨λ¦¬λ₯Ό 더 많이 μ‚¬μš©

  • λ©”μ„œλ“œ 호좜, λ§€μ„œλ“œ μ’…λ£Œ 이후에 λ‹€μ‹œ μžκΈ°μžμ‹  볡귀λ₯Ό μœ„ν•œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ λΉ„μš©μ΄ λ°œμƒ

βœ” μž¬κ·€ν•¨μˆ˜ μ‚¬μš© 쑰건

  • 문제의 크기λ₯Ό 점점 μž‘μ€ λ‹¨μœ„λ‘œ μͺΌκ°€ 수 μžˆμ–΄μ•Όν•¨

  • μž¬κ·€ 호좜이 μ’…λ£Œλ˜λŠ” μ‹œμ μ΄ μ‘΄μž¬ν•΄μ•Ό 함

βœ” μ‚¬μš©μ΄ μ ν•©ν•œ 경우

  • 주어진 문제λ₯Ό λΉ„μŠ·ν•œ ꡬ쑰의 더 μž‘μ€ 문제둜 λ‚˜λˆŒ 수 μžˆλŠ” 경우

  • 반볡문의 쀑첩 횟수(number of loops)κ°€ λ§Žκ±°λ‚˜ μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ €μš΄ 경우

  • λ³€μˆ˜ μ‚¬μš©μ„ 쀄여 였λ₯˜ κ°€λŠ₯성을 쀄일 경우

  • 반볡문으둜 μž‘μ„±λœ μ½”λ“œλ₯Ό λ”μš± κ°„κ²°ν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μž‘μ„±ν•˜κ³  싢은 경우


🌈 λŠλ‚€μ 

였늘 μž¬κ·€ν•¨μˆ˜λŠ” 사싀 μ²˜μŒμ— 봀을 λ•ŒλŠ” λ¨Έλ¦¬λ‘œλŠ” '자기 μžμ‹ μ„ λΆˆλŸ¬μ˜¨λ‹€' λΌλŠ” κ°œλ…μ„ 이해λ₯Ό ν–ˆμ§€λ§Œ 막상 μ½”λ“œλ₯Ό λ³΄λ‹ˆ 'μ € μ½”λ“œκ°€ μ™œ 자기 μžμ‹ μ„ λ‹€μ‹œ λΆˆλŸ¬μ˜€λŠ” 거지..?' ν•˜λŠ” 점이 계속 이해가 가지 μ•Šμ•˜λ‹€.
κ·Έλž˜μ„œ μ˜ˆμ‹œλ‘œ 5λΌλŠ” 수λ₯Ό λŒ€μž…ν•˜μ—¬ μ–΄λ–»κ²Œ λŒμ•„κ°€λŠ” 건지 ꡬ쑰λ₯Ό ν•˜λ‚˜ν•˜λ‚˜ μƒκ°ν•΄λ³΄μ•˜λŠ”λ°,
μ²˜μŒμ—” 이것도 이해가 μ•ˆλΌμ„œ λͺ»ν•˜λ‹€κ°€ 식 μ•ˆμ— 'ν•¨μˆ˜λͺ…(숫자)' μ΄λ ‡κ²Œ μ λŠ” 뢀뢄이 자기 μžμ‹ μœΌλ‘œ λ‹€μ‹œ λŒμ•„κ°€ κ·Έ 식 μ•ˆμ— λ‹€μ‹œ λŒ€μž…μ„ ν•˜μ—¬ 점점 μͺΌκ°œμ§€λŠ” κ²ƒμ΄λΌλŠ” ꡬ쑰가 이해가 λ˜μ—ˆλ‹€!!
이 ꡬ쑰λ₯Ό μ΄ν•΄ν•˜λ‹€λ³΄λ‹ˆ νŽ˜μ–΄μ™€ ν‘ΈλŠ” λ¬Έμ œμ—μ„œλ„ μ μš©μ„ ν•˜μ˜€κ³  λ‚΄κ°€ μ΄ν•΄ν•œ 점을 λ‹€μ‹œ νŽ˜μ–΄μ—κ²Œ μ„€λͺ…ν•˜λ©° 같이 ν’€ 수 μžˆμ—ˆλ‹€.
λ¬Όλ‘  μ•„μ§κΉŒμ§€ μ™„μ „νžˆ 이해λ₯Ό ν•œ 것 같진 μ•Šμ§€λ§Œ 더 곡뢀해야겠닀 🌈 ☘️

0개의 λŒ“κΈ€