250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- HTML
- Database
- mro()
- zipfile
- CSS
- View
- shutil
- inplace()
- __getitem__
- choice()
- remove()
- shuffle()
- MySQL
- fnmatch
- discard()
- __annotations__
- 오버라이딩
- items()
- count()
- node.js
- __len__
- 파이썬
- fileinput
- glob
- JS
- __sub__
- locals()
- MySqlDB
- randrange()
- decode()
Archives
- Today
- Total
흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)
(파이썬) 재귀 함수 본문
728x90
반응형
1. 재귀호출(recursive call)
- 함수 안에서 동일한 함수를 호출하는 형태
- 여러 알고리즘, 고급 정렬 알고리즘 작성시 사용됨
1-1. 재귀 호출 분석
2! = 1 * 2
3! = 1 * 2 * 3
4! = 1 * 2 * 3 * 4 = 4 * 3!
1-2. 규칙
n! = n * (n-1)!
- 규칙을 함수로 표현해보기
함수(n)은 n>1 이면 return n*함수(n-1) 함수(n)은 n=1 이면 return n
1-3. 검증
- 2!
함수(2)이면 2>1 이므로 2*함수(1)
함수(1)은 1이므로 return 2*1
결과는 2
- 3!
함수(3)이면 3>1 이므로 3*함수(2)
함수(2)는 1번식에 의해 2!이므로 return 2*1
3*함수(2)는 3*2=3*2*1
결과는 6
- 4!
함수(4)이면 4>1 이므로 4*함수(3)
함수(3)은 2번식에 의해 3*2*1 = 6
4*함수(3) = 4*6=4*3*2*1
결과는 24
In [ ]:
def factorial(num):
if num > 1:
return num* factorial(num-1)
else:
return num
In [ ]:
factorial(4)
Out[ ]:
24
1-4. 재귀호출의 전형적인 예
- 재귀 함수는 내부적으로 스택처럼 관리
- 파이썬에서 재귀함수의 깊이가(한번에 호출되는) 1000회 이하로 되어야 함
- 코드분석
문제
회문(순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어와 문장을 의미)을 판별할 수 있는 함수를 리스트 슬라이싱과 재귀함수를 활용하여 만들어보자. (단, 회문이면 결과를 True, 아니면 False를 변환)
In [ ]:
def palindrome(str):
str = str.strip()
if len(str) <= 1:
return True
elif str[0] == str[-1]:
return palindrome(str[1:-1])
else:
return False
In [ ]:
palindrome('네가 본 스리랑카랑 리스본 가네')
Out[ ]:
True
728x90
반응형
'파이썬 기초' 카테고리의 다른 글
(파이썬) MySQL을 이용한 단어장 만들기 (0) | 2023.03.22 |
---|---|
(파이썬) 파이썬과 MySQL 연동 (0) | 2023.03.22 |
(파이썬) DAO, DTO, VO 와 MVC 패턴 (0) | 2023.03.21 |
(파이썬) 폴더 관리 프로그램 실습 (0) | 2023.03.14 |
(파이썬) 파일 입출력 라이브러리 (0) | 2023.03.14 |
Comments