재귀 [명사]
1. 원래의 자리로 되돌아가거나 되돌아옴.
즉, 재귀 함수는 원래의 자리로 되돌아가거나 되돌아오는 함수.
"
자기 자신을 스스로 호출하는 함수!
"
를 말한다.
def recursion(n):
if n < 5:
print(n)
recursion(n+1)
recursion(1)
이런식으로 함수 내에서 자기 자신을 스스로 호출한다.
위 예시에서 if
문 처럼 종료 조건을 걸어주지 않으면 끊임없이 반복되니 주의하자.
재귀 함수의 구조를 보면 무한히 반복되다가 종료되는 부분이 for
문이나 while
문과 상당히 닮았다.
실제로 재귀 함수로 구현 가능하면 저 둘로도 구현 할 수 있으며, 반대의 경우도 마찬가지다.
하지만 재귀 함수로 구현 할 경우 for
문이나 while
문에 비해 코드가 훨씬 간결해진다!
재귀 함수는 함수 내에서 자기 자신을 불러오기 때문에, 별다른 값을 담아줄 변수를 선언해주지 않아도 되는 장점이 있다!
자기 자신을 호출하고 값을 기다리기 까지의 메모리 낭비가 있다.
그렇지만 이런 단점도 "꼬리 재귀"를 사용하면 해결된다!
재귀 호출이 끝나는 시점에서 return
값으로 끝내버리는 것이다.
def factorial(n):
if n == 0 or n == 1:
return 1
return n * factorial(n - 1)
이와 같이 끝나는 시점에서 바로 return
해주면 메모리의 낭비를 줄일 수 있다.