- 재귀 함수
- 함수가 자기 자신을 다시 호출하는 방법
- 기동 조건 : 언제 멈출 것인가? 반드시 지정
- 재귀 단계 : 문제를 똑같은 형태의 더 작은 문제로 쪼개어 자기 자신을 호출하는 부분
- 예시 문제1. 카운트 다운 : '3, 2, 1 발사' 출력
# 방법 1) for문
for i in range(3,-1,-1):
if i != 0:
print(i)
else:
print('발사')
>>> 3
2
1
발사
# 방법 2) 재귀함수
def countdown(n):
#n : 카운트다운 시작 수치
#기동 조건 : n이 0이 되면 함수 호출을 그만 둔다. (발사 출력을 생성)
if n==0:
print('발사')
return
#수행하는 작업
print(n)
#재귀 단계 : n에서 1을 뺀 값을 이용하여 자기 자신을 다시 호출한다.
countdown(n-1)
countdown(3)
>>> 3
2
1
발사
- 예시 문제2. 리스트 [1,2,3,4,5]의 합계를 구하시오.
list_1=[1,2,3,4,5]
# 방법 1) for문
result=0
for i in list_1:
result += i
print(result)
>>> 15
# 방법 2) 재귀 함수
def sum_list(arr):
#arr에 대입이 되는 원본의 데이터를 유지
#재귀가 멈추는 조건 : arr의 길이가 0이 되는 경우
if len(arr)==0:
return 0
return arr[0] + sum_list(arr[1:])
sum_list(list_1)
>>> 15
- 예시 문제3. 피보나치 수열 (1, 1, 2, 3, 5, 8, 13, 21, ....) 구현하기
def fibonacci(n):
#n : 피보나치 수열의 몇번째 데이터를 확인할 것인가?
if n == 1 or n == 2 :
return 1
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(6))
print(fibonacci(7))
>>> 8
13