재귀 함수는 자신을 실행하는 도중에 자신을 호출하는 함수이다. 이런 개념은 작은 동일한 문제들로 나눌 수 있는 문제를 해결하는데 매우 유용하다. 간단한 예시를 보자.
def countdown(n):
if n <= 0:
print('발사!')
else:
print(n)
countdown(n-1)
countdown
함수는 카운트다운을 수행하기 위해 자신을 호출한다. 함수의 인자 n
이 0 이하이면 "발사!"를 출력한다. 그렇지 않으면 현재 카운트를 출력하고, 카운트를 1 줄인 채로 자신을 다시 호출한다.
재귀 함수에서는 재귀를 멈추게 하는 조건, 즉 "기저 조건"이 꼭 필요하다. 아래 예시를 살펴보자:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
여기서, 기저 조건은 n == 0
이다. 이 조건에 도달하면 함수는 1
을 반환하고 자신을 더 이상 호출하지 않는다.
프로그램이 함수를 호출하면, 그 함수는 호출 스택의 최상단에 위치한다. 호출 스택은 프로그램의 활성화된 서브루틴들에 대한 정보를 저장하는 스택 데이터 구조이다. 이전에 본 factorial
함수를 인자 3
으로 호출하는 경우를 생각해보자:
factorial(3)
호출 스택은 다음과 같이 작동합니다:
factorial(3)
이 호출 스택에 들어간다.factorial(3)
이 factorial(2)
를 호출하고, 이것이 스택의 최상단에 위치한다.factorial(2)
가 factorial(1)
를 호출하고, 이것이 스택의 최상단에 위치한다.factorial(1)
이 factorial(0)
를 호출하고, 이것이 스택의 최상단에 위치한다.factorial(0)
이 기저 조건에 도달하고 반환을 시작한다.각각의 반환은 스택에 있는 바로 아래 함수도 반환하게 만듭니다. 마침내 factorial(3)
이 반환되면 스택이 비어집니다.
결론적으로, 파이썬에서 재귀 함수를 이해하고 구현하는 것은 중요한 기술이다. 처음에는 어렵게 느껴질 수 있지만, 연습을 통해 이를 강력한 도구로 활용할 수 있음을 발견하게 될 것이다.
[Python] 비트 연산자 다양한 예제를 통해 이해하기 |
---|
[Python] 관계 연산자 다양한 예제를 통해 이해하기 |
[Python] 'zsh: command not found: python' 오류 해결하기 |
[Python] 할당 연산자 다양한 예제를 통해 이해하기 |
[Python] 산술 연산자 다양한 예제를 통해 이해하기 |
CloneCoding
한 줄의 코드에서 시작되는 혁신!