<질문>
파이썬에서 정수의 계승을 어떻게 계산합니까?
<답변1>
가장 쉬운 방법은 사용하는 것입니다math.factorial
(Python 2.6 이상에서 사용 가능) :
import math
math.factorial(1000)
직접 작성하거나 작성해야하는 경우 반복적 인 접근 방식을 사용할 수 있습니다.
def factorial(n):
fact = 1
for num in range(2, n + 1):
fact *= num
return fact
또는recursive접근하다:
def factorial(n):
if n < 2:
return 1
else:
return n * factorial(n-1)
참고factorial function양의 정수에 대해서만 정의되므로 다음 사항도 확인해야합니다.n >= 0
그리고 그isinstance(n, int)
. 그렇지 않은 경우ValueError
또는TypeError
각기.math.factorial
당신을 위해 이것을 처리 할 것입니다.
<답변2>
Python 2.6 이상에서 다음을 시도하십시오.
import math
math.factorial(n)
<답변3>
가장 짧고 아마도 가장 빠른 솔루션은 다음과 같습니다.
from math import factorial
print factorial(1000)
자신 만의 솔루션을 구축 할 수도 있습니다. 일반적으로 두 가지 접근 방식이 있습니다. 나에게 가장 적합한 것은 :
from itertools import imap
def factorial(x):
return reduce(long.__mul__, imap(long, xrange(1, x + 1)))
print factorial(1000)
(결과가 될 때 더 큰 숫자에서도 작동합니다.long
)
두 번째 방법은 다음과 같습니다.
def factorial(x):
result = 1
for i in xrange(2, x + 1):
result *= i
return result
print factorial(1000)
<답변4>
def factorial(n):
if n < 2:
return 1
return n * factorial(n - 1)
<답변5>
Python2.5 또는 이전 버전을 사용하는 경우
from operator import mul
def factorial(n):
return reduce(mul, range(1,n+1))
최신 Python의 경우 여기에 다른 답변에 제공된 것처럼 수학 모듈에 계승이 있습니다.
<답변6>
def fact(n):
f = 1
for i in range(1, n + 1):
f *= i
return f
<답변7>
def fact(n, total=1):
while True:
if n == 1:
return total
n, total = n - 1, total * n
cProfile.run('fact(126000)')
4 function calls in 5.164 seconds
스택을 사용하는 것은 편리하지만 (재귀 호출처럼) 비용이 발생합니다. 세부 정보를 저장하면 많은 메모리를 차지할 수 있습니다.
스택이 높으면 컴퓨터가 함수 호출에 대한 많은 정보를 저장한다는 것을 의미합니다.
이 메서드는 반복과 같이 일정한 메모리 만 차지합니다.
def fact(n):
result = 1
for i in range(2, n + 1):
result *= i
return result
cProfile.run('fact(126000)')
4 function calls in 4.708 seconds
def fact(n):
return math.factorial(n)
cProfile.run('fact(126000)')
5 function calls in 0.272 seconds
<답변8>
이를 수행하는 또 다른 방법은np.prod
아래에 표시 :
def factorial(n):
if n == 0:
return 1
else:
return np.prod(np.arange(1,n+1))
<답변9>
비 재귀 솔루션, 가져 오기 없음 :
def factorial(x):
return eval(' * '.join(map(str, range(1, x + 1))))
'개발 > Python' 카테고리의 다른 글
파이썬의 dict에서 랜덤 값을 얻는 방법 (0) | 2021.01.14 |
---|---|
[파이썬] Pandas 데이터 프레임에 모든 열 이름을 표시하는 방법은 무엇입니까? (0) | 2021.01.13 |
[파이썬] ImportError: No Module Named bs4 (BeautifulSoup) (0) | 2021.01.13 |
Python에서 HTML을 이스케이프하는 가장 쉬운 방법은 무엇입니까? (0) | 2021.01.13 |