하나의 함수가 실행되는 동안 다른 함수를 호출할 수 있고, 실행되는 함수 자신을 다시 호출할 수 있다.
def countdown(n):
if n <= 0:
print('발사!')
else:
print(n)
countdown(n - 1)
n 이 0 이하인 경우: 발사! 출력n 이 양의 정수인 경우: n을 출력한 다음 바로 countdown(n - 1) 호출재귀 함수를 멈추려면 재귀 호출 과정에서 언젠가는 더 이상 자신을 호출하지 않아야 한다.
위 countdown() 함수는 0과 함께 호출될 때 더 이상 재귀 호출을 하지 않는다. 이 경우를 기저 조건이라 한다. 즉, countdown() 함수의 기저 조건은 n = 0이다.
반면 아래 함수는 기저 조건을 갖지 않는다.
def count_infinitely(n):
print(n)
count_finitely(n + 1)
count_infinitely() 함수를 호출하면 재귀 호출이 무한정 반복된다. 하지만 파이썬을 포함해서 대부분의 프로그래밍 언어는 재귀 호출의 무한 반복을 허용하지 않는다.
최대 재귀 한도
허용되는 재귀 호출의 최대 반복 횟수를 지정한다. 한도는 파이썬 버전과 운영체제 등에 따라 다를 수 있고, 필요에 따라 조정하는 것도 가능하다.
함수의 반환값을 지정하는 return 표현식이 여러 번 사용될 수 있다.
def even_odd(n);
if n % 2 == 0:
return 0
else:
return 1
even_odd(8) # 0
even_odd(3) # 1
파이썬 프로그램은 함수 실행 중에 return 표현식 명령문을 만나면 표현식의 값을 반환하면서 동시에 함수의 실행을 멈춘다. 함수 본문에 return 명령문이 여러 번 상되었다 하더라도 결국 하나의 반환값만 지정된다.
def countdown_num(n):
if n <= 0:
return 0
else:
print(n, '은(는) 아직 양수다.')
result = countdown_num(n - 1) + 1
return result
print(coutndown_num(0)) # 0
print(countdown_num(1))
# 1은(는) 아직 양수다.
# 1
자바스크립트의 함수 생명주기, 스코프 개념과 유사하다. 단지 파이썬에서는 프레임이라 지칭하는 듯 함.
아래 블로그를 참고하여 학습한 내용을 기록한 글입니다.