N <= 100 000
재귀 쓰지 말라는 얘기이다
# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
# 반복문 방법
def factorial(n):
result = 1
for i in range(1, n+1):
result = result * i
return result
# 재귀 방법
import sys
sys.setrecursionlimit(100000)
def factorial(n):
if n <= 1:
return 1
return n * factorial(n - 1)
user_input = input()
N = int(user_input)
print (factorial(N)%1000000007)
할 얘기가 많다
우선 range(x, y)는 x≤ range <y인 것을 알것이다.
고로 x≤range≤y 와 같은 효과를 내기 위해서는,
range(x, y+1)을 쓰면 된다.
재귀 방법은 factorial을 구현하는 대표적인 방법 중 하나이다.
근데 여기서는 잘 되지 않았다. 왜일까? 그리고 저 sys.setrecursionlimit()은 정확히 무얼 말하는걸까? 프로그램의 스택 사이즈는 운영체제와 관련이 있는 것으로 알고 있는데, 파이썬 코드에서 그걸 통제할 수 있을까?
→ 파이썬 코드에서 그걸 통제할 수 없다. 파이썬에서는 내부적으로 그 한계를 풀 수 있어도, 물리적으로 OS에서 배정한 메모리 (보통 8MB)를 벗어나면, 세그폴트이므로, 프로그램이 강제종료된다.