-
TIL. 27 재귀 호출(recursive call)TIL 2020. 11. 4. 13:19728x90
## 함수에서 재귀호출 사용하기
## 재귀호출 (recursive call) : 함수 안에서 자기자신을 호출하는 방식을 재귀호출이라 한다.
## 일반적인 상황에서는 사용되지 않지만 알고리즘을 구현할때 매우 유용하다 (구현 == 만들다와 같은 뜻)
## 보통 알고리즘에 따라서 반복문으로 구현한 코드보다 좀 더 직관적이고 이해하기 쉬운 경우가 많다.
def helllo(): print('hello mun') helllo() helllo()
## helllo 함수 안에서 자기 자신을 호출하고 있는 상황이다.
## 무한루프 처럼 작동하다가 어느 순간 error가 발생하는데
## 이유는 파이썬에서는 최대 재귀 깊이(maximum recursion depth)가 1,000 으로 정해져있기 때문이다.
## 즉, hello 함수가 자기 자신을 계속 호출하다가 최대 재귀 깊이를 초과하기 때문에 error 가 발생한다.
이러한 현상을 재귀호출의 스택 넘침 현상이라 한다.
## 재귀 호출을 사용할 경우 반드시 종료 조건을 만들어 주어야 한다.
def hello(count): if count == 0 : # 종료 조건, count 가 0이면 hello 함수를 호출 하지 않고 끝냄. return print('hello, hello', count) count -= 1 hello(count) hello(5) # hello, hello 5 # hello, hello 4 # hello, hello 3 # hello, hello 2 # hello, hello 1
## 여기서 종료 조건인
## if count = 0:
## return // count 가 0이면 return 되돌아 가세요 라는 의미인데,
if문 이 참이되어 아래 print가 실행되지 않고 함수가 종료된다.
## hello (5) 로 hello 함수를 총 6번 루프가 돌아가며 print는 5번 실행된다.1 => 52 => 43 => 34 => 25 => 16 => return으로 종료
## 재귀호출로 팩토리얼 구하기
def factorial(n): if n == 1: return 1 return(n * factorial(n-1)) #return 위치 주의 print(factorial(5)) :: 120
5! = 5 x 4 x 3 x 2 x 1 이다.
### 여기서 마지막 1! 값은 if 조건문의 반환 값 1로써, 함수를 중단시키는 조건이자 마지막 1!의 값을 준다.
## 위 함수를 호출 및 반환하는 과정이다.
## 총 5번의 호출과 5번의 반환으로 원하는 값을 반환할 수 있다.
728x90'TIL' 카테고리의 다른 글
TIL. 29 전역 변수, 지역변수, 클로저 알아보기 (0) 2020.11.06 TIL. 28 람다 표현식(lambda) 사용하기 (0) 2020.11.05 TIL.26 함수 매개변수 및 인수 (0) 2020.11.03 TIL. 25 함수의 호출 과정 (0) 2020.11.02 TIL. 24 함수 만들고 사용하기 (0) 2020.11.01