320x100
재귀 함수 : 반복문 + 스택 구조의 결합
(나중에 들어간게 먼저 나오는 구조)
재귀 함수의 특징 : 재귀 함수는 함수 내에서 다시 자기 자신을 호출한 후
그 함수가 끝날 때까지 함수 호출 이후의 명령문을 수행하지 않는다.
재귀 함수의 장점 :
1. loop문을 별도로 작성하지 않아도 된다.
2. 코드가 간결해진다.
1 2 3 4 5 6 7 8 9 | def hap(a,b): return (a+b) def gob(a,b): return (a*b) def hap_gob(a,b): k=hap(a,b) #5 m=gob(a,b) #6 return k+m print(hap_gob(2,3)) #11 |
위처럼 파이썬은 함수 내에서 다른 함수를 불러오는 것이 가능하다.
재귀 함수는 다른 함수가 아닌 자기 자신을 불러오는 것
# 재귀 함수를 통해 1까지의 합 출력하기
1 2 3 4 5 6 | def add_func(n): if n<=1: # 1보다 이하면 끝 return n else: return n+add_func(n-1) print(add_func(3)) # 3+2+1=6 |
add_func(3) = 3 + add_func(2)
2 + add_func(1)
1
add_func(3)= 3+ 2 + 1 = 6
# 팩토리얼 함수 만들기
1 2 3 4 5 6 | def factorial(n): if n==0 or n==1: return 1 else: return n*factorial(n-1) print(factorial(5)) #120 |
아까와 비슷하지만 n일 때 팩토리얼 값은 1이 나오므로 조금만 바꿔주면 된다.
재귀 함수를 작성할 때 항상 loop문 역할을 하는 코드가 나오기 전
재귀 함수를 계속 돌다가 마지막에 재귀를 끝낼 조건을 맨 앞에 작성해두어야 한다.
그래야 무한 루프가 돌지 않는다.
# 제곱 함수 만들기
1 2 3 4 5 6 | def power(n,m): if m==0: return 1 else: return n*power(n,m-1) print(power(5,3)) #125 |
이런 함수를 만들지 않아도 pow() 함수가 있으니 그걸 사용하면 된다.
# 구구단 만들기
1 2 3 4 5 6 7 | def multi_table_2dan(n): if n==1: return '2 x '+str(n)+' = '+str(2*n) else: print('2 x '+str(n)+' = '+str(2*n)) return multi_table_2dan(n-1) print(multi_table_2dan(9)) |
거꾸로지만.. 재귀니까 별 수 없지않..을까?
# 구구단 제대로 출력
1 2 3 4 5 6 7 | def multi_table_2dan(n): if n==1: return '2 x '+str(10-n)+' = '+str(2*(10-n)) else: print('2 x '+str(10-n)+' = '+str(2*(10-n))) return multi_table_2dan(n-1) print(multi_table_2dan(9)) |
n 대신 10-n으로 뒤집고
n을 1씩 줄이니까 됐다.
반응형
'나 취준생 > 파이썬' 카테고리의 다른 글
자카드 유사도 + 카카오 문제 (0) | 2020.12.24 |
---|---|
LRU 알고리즘 + 카카오 문제 (0) | 2020.12.23 |
탐욕 알고리즘 (0) | 2020.12.23 |
버블 정렬 (0) | 2020.12.23 |
이진 탐색 (0) | 2020.12.22 |