재귀는 어떠한 작업을 할 때, 자기 자신을 포함 및 사용하는 경우를 말합니다.
재귀를 사용하는 대표적인 예인 팩토리얼 문제를 보겠습니다.
def factorial(n: int):
if n > 0:
return n * factorial(n-1)
else:
return 1
if __name__ == '__main__':
n = int(input('출력할 팩토리얼 값을 입력: '))
print(f'{n}의 팩토리얼은 {factorial(n)}입니다.')
만약 3의 팩토리얼 값을 구한다고 했을 때 factorial(3)을 호출하면
3 * factorial(2)을 반환하고 factorial(2)는 다시 factorial(1)을, factorial(0)일 때는 1을 반환하게 됩니다.
그럼 factorial(1) -> 1 * 1(factorial0)이고 factorial(2) -> 2 * 1, factorial(3) -> 3 * 2
이렇게 해서 6이라는 결과가 나옵니다.
다음으로는 최대 공약수를 재귀적으로 구하는 방법입니다.
def gcd(x: int, y: int) -> int:
if y > x:
x, y = y, x
if y == 0:
return x
else:
return gcd(y, x % y)
if __name__ == '__main__':
x = int(input('첫 번째 정수값을 입력하세요.: '))
y = int(input('두 번째 정수값을 입력하세요.: '))
print(f'두 정숫값의 최대 공약수는 {gcd(x, y)}입니다.')
함수 gcd를 보면 y가 x보다 클때 서로 스왑해주는데
그건 큰 값을 작은 값으로 나눈 나머지를 사용하기 때문입니다.
x가 18이고 y가 12일 때, gcd 함수를 그대로 적용하면 gcd(18, 12) -> gcd(12, 6) -> gcd(6, 0)
이렇게 되고 x 자리에 있는 6이 최대 공약수가 됩니다.
'IT > 알고리즘' 카테고리의 다른 글
백준 - 1914번 (0) | 2020.11.18 |
---|---|
알고리즘 - 재귀 알고리즘(2) (0) | 2020.11.18 |
백준 - 5430번 (0) | 2020.11.13 |
알고리즘 - 큐(queue) (0) | 2020.11.12 |
백준 - 4949번 (0) | 2020.11.09 |
댓글