[python] 파이썬 계승 함수

파이썬에서 정수의 계승을 계산하는 방법은 무엇입니까?



답변

가장 쉬운 방법은 사용하는 것입니다 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

또는 재귀 접근법 :

def factorial(n):
    if n < 2:
        return 1
    else:
        return n * factorial(n-1)

있습니다 계승 기능이 당신이 또한 확인해야합니다, 그래서 오직 양의 정수에 대해 정의 n >= 0하고 그 isinstance(n, int). 그렇지 않은 경우 a ValueError또는 a를 TypeError각각 올리십시오 . math.factorial당신을 위해 이것을 돌볼 것입니다.


답변

Python 2.6 이상에서는 다음을 시도하십시오.

import math
math.factorial(n)


답변

이것은 오래된 스레드이기 때문에 실제로는 필요하지 않습니다. 그러나 여기에 while 루프를 사용하여 정수의 계승을 계산하는 또 다른 방법이 있습니다.

def factorial(n):
    num = 1
    while n >= 1:
        num = num * n
        n = n - 1
    return num


답변

기존 솔루션

가장 짧고 아마도 가장 빠른 해결책은 다음과 같습니다.

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)


답변

def factorial(n):
    if n < 2:
        return 1
    return n * factorial(n - 1)


답변

Python2.5 또는 이전 버전을 사용하는 경우

from operator import mul
def factorial(n):
    return reduce(mul, range(1,n+1))

최신 Python의 경우 수학 모듈에 계승이 있으며 여기에 다른 답변이 나와 있습니다.


답변

def fact(n):
    f = 1
    for i in range(1, n + 1):
        f *= i
    return f