이중 계승 코드

이중 계승?

계승, 그러니까 우리가 일반적으로 알고 있는 팩토리얼은 1씩 빼가면서 곱하는 것이다. 그래서 3!은 3*2*1 해서 6이고 4!은 4*3*2*1 해서 24다. 어? 그럼 이중 계승은 저걸 두 번 하는건가요? 아뇨 그게 아니라 곱하는 숫자 공차가 2가 됩니다. 그래서 6!!은 6*4*2 해서 48, 5!!은 5*3*1 해서 15다. 즉, 이중 계승은 입력하는 숫자가 홀수냐 짝수냐에 따라 종착점이 다르다.

확장판으로 다중 계승이 있긴 한데 저것까지는 무리일 듯.

For

import sys
a = float(sys.stdin.readline())
factorial = 1
if a < 0:
    print("Can't calculate factorial")
elif a == 0 or a == 1:
    print(factorial)
    # 0! = 1
elif a % 1 != 0:
    print("정수가 아닌 유리수는 일반적인 방법으로 팩토리얼을 구할 수 없습니다. ")
else:
    for i in range(int(a),0,-2):
        factorial *= i
    print(factorial)

While

import sys
a = float(sys.stdin.readline())
factorial = 1
if a < 0:
    print("Can't calculate factorial")
elif a == 0 or a == 1:
    print(factorial)
    # 0! = 1
elif a % 1 != 0:
    print("정수가 아닌 유리수는 일반적인 방법으로 팩토리얼을 구할 수 없습니다. ")
else:
    while a > 0:
        factorial *= a
        a -= 2
    print(factorial)

걍 2씩 빼면서 곱하는 게 다다. 대신 저건 따로 함수 이식할 일은 없다.