๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Language/Python

[๋ฌธ๋ฒ•] ์žฌ๊ท€ ํ•จ์ˆ˜์™€ ์ œํ•œ

 

 ๐Ÿ’ก ์žฌ๊ท€ํ•จ์ˆ˜๋ž€?

์žฌ๊ท€ ํ•จ์ˆ˜๋ž€ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์ด๋ฉฐ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•จ์ˆ˜ ์žฌ๊ท€๋ผ๊ณ  ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ๋กœ์ง์„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋‹ค ์ผ์ • ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด ํ•จ์ˆ˜๋ฅผ ์ดํƒˆํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ๋‹ค.

# ์žฌ๊ท€ ํ•จ์ˆ˜ ์˜ˆ์‹œ ์ฝ”๋“œ (ex. ํŒฉํ† ๋ฆฌ์–ผ)
def fact(n):
    """Recursive function to find factorial"""
    if n == 1:
        return 1
    else:
        return (n * fact(n - 1))
a = 6
print("Factorial of", a, "=", fact(a))

 

 

 

 

 โ–ช๏ธ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ œํ•œ

์žฌ๊ท€ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ํ•จ์ˆ˜๊ฐ€ ์ž์‹ ์„ ํ˜ธ์ถœ ํ•  ๋•Œ๋งˆ๋‹ค ์ค‘๊ฐ„ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋”ฐ๋ผ์„œ ์ผ๋ฐ˜์ ์ธ ๋น„ ์žฌ๊ท€ ํ•จ์ˆ˜๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ์™€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•œ๋‹ค.

์ด ๋•Œ๋ฌธ์— ํŒŒ์ด์ฌ์—” ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ œํ•œ์ด ์žˆ๋Š”๋ฐ ์ด๋Š” python3์„ ๊ธฐ์ค€์œผ๋กœ 1000ํšŒ๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ •ํ™•ํ•œ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ œํ•œ์€ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

import sys
print(sys.getrecursionlimit())

์ด๋•Œ ์žฌ๊ท€ ํ˜ธ์ถœ ์ œํ•œ์„ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ RecursionError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

 

 

 โ–ช๏ธ ์žฌ๊ท€ ํ˜ธ์ถœ ์ œํ•œ์˜ ์ œ๊ฑฐ

ํŒŒ์ด์ฌ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ œํ•œ ์„ค์ •์˜ ๊ฒฝ์šฐ, ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

import sys
sys.setrecursionlimit(5000)

 

 

 

 

 โ–ช๏ธ ์žฌ๊ท€์˜ ์žฅ์  vs ๋‹จ์ 

์žฅ์  ๋‹จ์ 
- ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. 
- ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ ธ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง„๋‹ค.
- ๋•Œ๋กœ๋Š” ์žฌ๊ท€์˜ ๋…ผ๋ฆฌ๊ฐ€ ๋” ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค.
- ํ•˜์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์žฌ๊ท€๊ฐ€ ์˜คํžˆ๋ ค ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ ๋‹ค์†Œ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ TIP : ๋ณดํ†ต ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์˜ ๊ฒฝ์šฐ, ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„/๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ์— ๊ถŒ์žฅ X. 

 

 

728x90