본문 바로가기
자료구조

6주차, 파이썬으로 팩토리얼 구하기

by 호놀롤루 2022. 1. 24.

팩토리얼은 숫자! 로 표시한다. 뜻은 주어진 수에서 1을 빼고, 뺀 값을 원래 값에 곱하는데

그 과정을 0이 될 때까지 반복한 수다.

 

방법1, 재귀함수

def fact1(num):

    if num >0:

        return fact(num-1) * num

    # 5가 들어갈 경우 fact(4) * 5 -> fact(3) * 4 * 5

    # -> fact(1) * 2 * 3 * 4 * 5 -> fact(0) * 1 *2 * 3 * 4 * 5

    # -> 1 * 2 * 3 * 4 * 5 = 120

    else:

        return 1

print(fact1(5))

// 120

 

처음 fact(5)가 호출되면 5가 0보다 크니 리턴으로 간다. 그런데 거기서 1 작은 fact1이 호출된다.

그걸 0까지 반복하면 1이 나온다.

그럼 fact(0)이 끝나고 fact(1)로 간다. fact(1)은 fact(0)의 리턴값 * 1을 반환하고 fact(2)로 간다.

fact(2)는 fact(1)의 반환값인 1 * 2를 반환하고 3으로 간다.

3은 2 * 3을 4로 가져가고 4는 6 * 4를 5로 가져간다.

fact(5)는 24 * 5를 반환하고 함수가 끝나게 된다.

 

재귀함수 없이 factorial 값 구하기

def fact2(num):

    result = 1

    for i in range(1, num + 1):

        result *= i

    return result

print(fact2(5))

print(fact2(6))

// 120 // 720

 

둘 다 사용가능하지만, 재귀함수의 경우, 스택 메모리가 많이 쌓이기 때문에 대체가능하면

반복문을 쓰는 게 좋다. (재귀함수로만 구현 가능할 때 사용)

댓글