์ค๋ ๋ฐฐ์ธ ๊ฒ
๋ถํ ๋ ์๋ธ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ๋ฐ๋ณต๋๋ ํด๊ฒฐ๋ฒ์ ์ฌ์ฌ์ฉํ๋ ๊ธฐ๋ฒ
(Dynamic Programming์์ ํ์ฉ๋จ)
# ๋ฉ๋ชจ์ด์ ์ด์
์ ์ฉ๋์ง ์์ ๊ฒฝ์ฐ
def recursive_factorial(n): # ์ต์์ ํธ์ถ
if n is 0:
return 1
else:
return n * recursive_factorial(n - 1) # ํจ์ ๋ด๋ถ
memo = {} # ๊ณ์ฐ ๊ฒฐ๊ณผ ์ ์ฅํ ๋์
๋๋ฆฌ
def factorial(n):
if n == 0:
return 1
elif n in memo: # ์ฌ๊ท ํจ์ ๊ณ์ฐํ๋ฉด์ ์ ์ฅ๋๋ค๋ฉด
return memo[n]
else:
result = n * factorial(n-1)
memo[n] = result # ๋ฉ๋ชจ์ฅ์ ๊ณ์ฐํ n, ๊ณ์ฐ ๊ฒฐ๊ณผ ์ ์ฅ
return result
์ด๋ ๊ฒ ํ๋ฉด factorial(5)ํ๊ณ factorial(4)ํ ๋, 4 ๊ฐ์ 24๋ก memo์ ์ ์ฅํด ๋จ๊ธฐ ๋๋ฌธ์ ๋๋ฒ์งธ factorial ํจ์ ํธ์ถ์์๋ ๋ก์ง ๊ณ์ฐ ํ์์์ด ๋ฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.