Python/Python
[Python] 19. 재귀함수
구름솜:D
2024. 9. 8. 16:01
728x90
일반적인 함수 호출
- '함수 a'가 호출되어 실행되던 코드 중간에 '함수b'를 호출하면서 코드 진행이 '함수b'의 코드로 옮겨갑니다.
- '함수 b'가 호출되어 실행되던 코드 중간에 '함수c'를 호출하면서 코드 진행이 '함수c'의 코드로 옮겨갑니다.
- '함수 c'의 모든 실행이 종료되어 return한 값을 반환하고, '함수 b'의 '함수 c'를 호출했던 코드 다음 줄로 옮겨갑니다.
- '함수 b'의 모든 실행이 종료되어 return한 값을 반환하고, '함수 a'의 '함수 b'를 호출했던 코드 다음 줄로 옮겨갑니다.
- '함수 a'의 모든 실행이 종료되면 최종 값을 return합니다.
재귀함수
- 함수 내에서 자기 자신 함수를 다시 호출하여 작업을 수행하는 방식
- 함수 내에서 같은 이름의 함수를 다시 호출하여 작업을 수행하는 방식
- 재귀함수는 반드시 탈출 조건이 있어야 stack overflow를 방지할 수 있다.
def fun(n):
if n == 1:
return(print('finish1'))
else:
print(n)
fun(n - 1)
return (print('finish2'))
fun(3)
#출력
#3
#2
#finish1
#finish2
#finish2
- fun(3) 함수가 실행되고, 조건식의 n ==1이 아니기 때문에 print(3)을 출력하고 fun(2)함수를 호출한다.
- fun(2) 함수가 실행되고, 조건식의 n ==1이 아니기 때문에 print(2)을 출력하고 fun(1)함수를 호출한다.
- fun(1)이 실행되면 "n == 1" 조건이 만족되어 print('finish1')을 리턴하고, fun(2) 함수에서 함수 fun(1)함수를 호출 했던 다음 코드 print('finish2')를 리턴한다.
- fun(3) 함수에서 함수 fun(2)함수를 호출했던 다음 코드 print('finish2')를 리턴하고 함수를 마친다.
function = []
def fun(n):
global function
if n == 1:
return function.append('finish1')
else:
function.append(n)
fun(n - 1)
return function.append('finish2')
fun(3)
print(function)
#[3, 2, 'finish1', 'finish2', 'finish2']
function = []
def fun(n):
global function
if n == 1:
return function.append('finish')
else:
function.append(n)
fun(n - 1)
return function.append(fun(n - 1))
fun(3)
print(function)
#[3, 2, 'finish', 'finish', None, 2, 'finish', 'finish', None, None]
*** append를 리턴하는 경우 특정값이 없을 때 None를 리턴한다.