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
- MESH
- 도커 레이어
- 그리드분할
- GNN
- 알고리즘
- Set
- 폴더조사
- 동명이인찾기
- 귀여운고래
- 파이썬
- geojson
- 이미지빌드
- geopandas
- 도커
- STL
- 좌표거리
- 패치분할
- osmnx
- 3d데이터
- GIS
- Python
- docker
- pyvista
- python최단거리
- graph
- 지하철역좌표
- 데이터입수
- 컨테이너
- 3d
- GCN
Archives
- Today
- Total
이것저것 기록
[알고리즘] 재귀함수 - 최대공약수, 피보나치 수열 본문
* <모두의 알고리즘 with 파이썬>의 문제 05를 정리한 내용입니다.
1. 일반적인 알고리즘으로 최대 공약수 구하기
# 최대공약수 알고리즘
def gcd_algorithm (a, b):
i = min(a,b)
while True:
if a%i == 0 and b%i == 0 :
print("GCD = {}".format(i))
return i
i = i-1
print("i = {} " .format(i))
- 두 개의 숫자를 입력받는다.
- 입력받은 수 중 작은 수를 찾는다. (min (a,b)) 생각해보면 당연한 프로세스다. 최대 공약수라는 말 자체가 입력 받은 두 개의 수를 나누는 수 중 공통인 것들 중, 가장 큰 것인데 -- 어떤 수를 나누려면 그 수보다 커서는 안된다 (되긴 하는데 여기서는 안됨, 분수 X)
- if문에 걸려 값을 return 하기 전까지 다음을 반복
- if문 조건: 두 수를 나눴을 때 나머지가 모두 0인 수
- 아니라면 두 수 중 작은 수에서 계속해서 1을 빼주고 위의 if문을 시도한다
2. 재귀함수로 최대공약수 구하기
# 재귀 함수로 최대공약수 알고리즘
def recursive_gcd(a, b):
print("gcd: ", a, b)
if b == 0:
return a
print("a%b: {} \n".format(a%b))
return recursive_gcd(b, a%b)
- 저번 포스팅을 작성할 때 재귀함수를 완벽히 이해했다고 생각했는데, 변형 문제를 막상 풀려니 적용 못하겠더라... 아직 더 익숙해질 필요가 있는듯 ㅠㅠ
- 위와 마찬가지로 숫자 2개를 입력으로 받는다.
- 종료 조건은 오른쪽에 입력받는 숫자 (처음에는 그냥 숫자, 이후부터는 나머지)가 0일 때이다. 종료시 반환 값은 왼 쪽에 있는 숫자이며, 최대공약수이다.
- 재귀함수의 입력값은 초기에 입력 받았던 b와 a를 b로 나누고 남은 나머지이다.
3. 재귀함수로 피보나치 수열 구하기
def fibonacci(n, m, ls):
# n: 선행
# m: 후행
t = n + m
if len(ls) == 0:
ls.append(n)
ls.append(m)
ls.append(t)
else:
ls.append(t)
print(ls)
if len(ls) == 7:
return (n+m)
return fibonacci(m, t, ls)
- 마지막 문제는 7번째 피보나치 수열을 재귀함수로 푸는 문제였다.
- 피보나치 수열의 첫 번째 숫자, 두 번째 숫자, 빈 list를 입력으로 준다.
- 만약에 첫 번째 숫자 (n)이 0이면 n, m, t (n+m)을 list에 추가하여 초기 세팅을 완료해주고, 첫 번째 숫자가 0이 아니라면 t만 추가해준다.
- 종료 조건은 이렇게 피보나치 숫자가 추가된 리스트의 길이가 (우리가 구하고자 하는) 7이 된다면 종료한다.
'코린이 > 코딩 기초 & 알고리즘 공부' 카테고리의 다른 글
[알고리즘] 선택 정렬 (0) | 2021.08.01 |
---|---|
[알고리즘] 순차 탐색 (0) | 2021.08.01 |
[알고리즘] 재귀함수 - 팩토리얼 구하기 (0) | 2021.06.20 |
[알고리즘] 동명이인 찾기 알고리즘 (set) (0) | 2021.06.17 |
[알고리즘] 최댓값, 최댓값 위치를 찾는 알고리즘 (0) | 2021.06.13 |
Comments