์ํ์ ์ํํจ์ ๊ณ์ฐ์๋ง ์ ์ฉํ๊ฐ?
ํฉํ ๋ฆฌ์ผ, ํผ๋ณด๋์น ์์ด, ์ต๋๊ณต์ฝ์์ ๊ฐ์ ์ํํจ์ ๋ฟ๋ง ์๋๋ผ, ๋ค๋ฅธ ๋ง์ ๋ฌธ์ ๋ค์ recursion์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
๋ฌธ์์ด ๋ค์ง๊ธฐ
def f(s):
if len(s)==0:
return
else:
f(s[1:])
print(s[0],end='')
s=input()
f(s)
abcdef
fedcba
Base Case : ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 0์ด๋ฉด ์ถ๋ ฅ์ ํ์ง ์๊ณ return
์ฌ๊ท์ ์ผ๋ก ์ดํด๋ฅผ ํด์ผํ๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์๋ฅผ ์ ์ธํ ๋ฌธ์์ด์ ๋ค์ง์ด์ ์ถ๋ ฅํ๊ณ , ๊ทธ ๋ค์ ์ ์ธํ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์์ด์ด ๋ค์ง์ด์ ์ถ๋ ฅ๋๋ค.
2์ง์๋ก ๋ณํํ์ฌ ์ถ๋ ฅํ๊ธฐ
def fun(n):
if n<2:
print(n,end='')
return
fun(n//2)
if n%2==0:
print(0,end='')
elif n%2==1:
print(1,end='')
n=int(input())
fun(n)
33
100001
24
1100
Base Case : n์ด 0 ๋๋ 1์ด๋ฉด ์๊ธฐ ์์ ์ ์ถ๋ ฅํ๊ณ ์ฌ๊ทํจ์๋ฅผ ์ข ๋ฃํ๋ค.
n์ด ํ์๋ผ๋ฉด ์ด์ง์์ ์ ์ผ ๋ง์ง๋ง ์๋ 1, ์ง์๋ผ๋ฉด ์ ์ผ ๋ง์ง๋ง ์๋ 0์ด๋ค.
๋ฐ๋ผ์ n์ 2๋ก ๋๋ ๋ชซ์ ์ด์ง์๋ก ์ถ๋ ฅํ ๋ค, ๋๋จธ์ง ์ฐ์ฐ์ ํตํด n์ด ํ์๋ผ๋ฉด 1, ์ง์๋ผ๋ฉด 0์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
Recursion vs. Iteration
- ๋ชจ๋ ์ํํจ์๋ ๋ฐ๋ณต๋ฌธ(iteration)์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ๊ทธ ์ญ๋ ์ฑ๋ฆฝ. ๋ชจ๋ ๋ฐ๋ณต๋ฌธ์ Recursion์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.
- Recursion์ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ ๋จ์ํ๊ณ ์๊ธฐ์ฝ๊ฒ ํํํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
- ํ์ง๋ง ํจ์ ํธ์ถ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค=ํ๋ก๊ทธ๋จ ์๋ ๋ฉด์์ ๋๋ฆฌ๋ค.
(๋งค๊ฐ๋ณ์ ์ ๋ฌ, ์กํฐ๋ฒ ์ด์ ํ๋ ์ ์์ฑ ๋ฑ)
Recursion์ ์ค๊ณ
- ์ ์ด๋ ํ๋์ base case, ์ฆ ์ํ๋์ง ์๊ณ ์ข ๋ฃ๋๋ case๊ฐ ์์ด์ผ ํ๋ค.
- ๋ชจ๋ case๋ ๊ฒฐ๊ตญ base case๋ก ์๋ ดํด์ผ ํ๋ค.
- base case๋ ํ๋๊ฐ ์๋๊ณ ์ฌ๋ฌ๊ฐ์ผ ์๋ ์๋ค.
๊ทธ ์ค์์ ์ค์ํ ํฌ์ธํธ๊ฐ ์๋๋ฐ ๋ฐ๋ก, ์์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ช ์์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ฟ์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์์ฐจํ์(๋ช ์์ ๋งค๊ฐ๋ณ์)
def search(lst,begin,end,target):
if begin>end:
return False
elif lst[begin]==target:
return begin
else:
search(lst,begin+1,end,target)
์์ ์ธ๋ฑ์ค begin์ ๋ช
์์ ์ผ๋ก ์ ์ธํ์๋ค.
begin ๊ฐ์ด target๊ณผ ๊ฐ๋ค๋ฉด begin์ ๋ฆฌํดํ๊ณ , ์ผ์นํ์ง ์๋ค๋ฉด begin+1 ~ target ๊น์ง search ํจ์๋ฅผ ๋ค์ ํธ์ถํ๋ค.
์ต๋๊ฐ ์ฐพ๊ธฐ(๋ช ์์ ๋งค๊ฐ๋ณ์)
def findMax(lst,begin,end):
if begin==end:
return lst[begin]
else:
return max(lst[begin],findMax(lst,begin+1,end))
์์ ์ธ๋ฑ์ค begin์ ๋ช
์์ ์ผ๋ก ์ ์ธํ์๋ค.
์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฐ๊ณผ, ์ฒซ ๋ฒ์งธ+1 ~ ๋ง์ง๋ง ์ธ๋ฑ์ค ๊น์ง์ ์ต๋๊ฐ์ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ฉด lst์ ์ต๋๊ฐ์ด ์ถ๋ ฅ๋๋ค.
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ]์ต๋ ๊ณต์ฝ์(GCD) ์๊ณ ๋ฆฌ์ฆ - ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ (0) | 2023.06.19 |
---|---|
[์๊ณ ๋ฆฌ์ฆ]๋ณํฉ ์ ๋ ฌ(Merge Sort) (0) | 2023.06.19 |
์นด์ดํ ์ ๋ ฌ(Counting Sort)Permalink (0) | 2023.06.19 |
[์๊ณ ๋ฆฌ์ฆ]์๊ฐ๋ณต์ก๋ (0) | 2023.06.19 |
[์๊ณ ๋ฆฌ์ฆ]Recursion ์์ฉ(๋ฏธ๋ก์ฐพ๊ธฐ) (0) | 2023.06.19 |