def recursive_function():
print("재귀함수를 호출합니다")
recursive_function()
recursive_function()
"재귀함수를 호출합니다" 라는 문자열을 무한히 출력하는 듯 싶다가, 최대 재귀 깊이 초과 메시지가 출력되며 에러가 발생한다. 함수는 호출될 때마다 스택 프레임에 쌓이게 되는데,재귀의 경우 계속 호출만 되고 반환이 되지 않아 스택이 계속 쌓이게 된다. 당연히 컴퓨터메모리는 한정된 메모리를 가지고 있으므로 이 스택이 계속 쌓이면 메모리에 이상이 발생할 수 있으므로 그 전에 중단시켜버리는 것이다.
재귀함수는 DFS를 실질적으로 구현하고자 할 때 자주 사용되는 방법중 하나이므로, 꼭 이해하고 있어야 한다.
def recursive_function(i):
# 100번째 호출을 했을 때 종료되도록 종료조건 명시
if i == 100:
return
print(i, '번째 재귀함수에서', i+1, '번째 재귀함수를 호출합니다.')
recursive_function(i+1)
print(i, '번째 재귀함수를 종료합니다.')
recursive_function(1)
이처럼 재귀함수는 스택에 데이터를 넣었다가 꺼내는 동작을 수행한다.
수학적으로 0!과 1! 의 값은 1이다.
def factorial_iterative(n):
result = 1
for i in range(n,0,-1):
result = result*i
return result
def factorial_recursive(n):
if n <=1:
return 1
return n*factorial_iterative(n-1)
대표적으로, DFS를 간결하고 짧은 코드로 작성하기 위해 단순히 재귀함수를 이용하여 재귀함수를 구현하기도 함