함수 안에 자기 자신을 재참조하는 방법
- 적어도 하나의 base case, 즉 순환되지 않고 종료되는 case가 있어야 한다
- 모든 case는 base case로 수렴해야 한다
- 암시적 매개변수를 명시적 매개변수로 바꿔야 한다
- 순차탐색에서 암시적 매개변수(처음 위치는 암시적으로 0부터 시작)
data = [0,2,4,6,8,10,11]
def search(data, n, target):
for i in range(n):
if data[i] == target:
return i
return -1
print(search(data,len(data),8))
- 순차탐색에서 명시적 매개변수(시작 위치, 끝 위치 명시적으로 표현)
data = [0,2,4,6,8,10,11]
def search(data, begin, end, target):
if begin > end: # 길이가 0 인 경우(데이터가 없음)
return -1
elif target == data[begin]:
return begin
else:
return search(data,begin+1,end,target)
print(search(data,0,len(data),8))
- 시작과 끝 중간 인덱스를 나눠서 찾는다
data = [0,2,4,6,8,10,11]
def search(data, begin, end, target):
if begin > end: # 길이가 0 인 경우(데이터가 없음)
return -1
else:
middle = (begin+end)//2
if data[middle] == target:
return middle
index = search(data,begin,middle-1, target)
if index != -1:
return index
else:
return search(data,middle+1,end,target)
print(search(data,0,len(data),10))
- 최댓값 찾기(암시적)
data = [0,2,4,6,8,10,11]
def findMax(data,n):
for i in range(1,n):
result = max(data[0],data[i])
return result
print(findMax(data,len(data)))
- 최대값 찾기(명시적)
data = [0,2,4,6,8,10,11]
def findMax(data,begin,end):
if begin == end:
return data[begin]
else:
return max(data[begin],findMax(data,begin+1,end))
print(findMax(data,0,(len(data)-1)))
- 최대값 찾기(중간값 기준)
data = [0,2,4,6,8,10,11]
def findMax(data,begin,end):
if begin == end:
return data[begin]
else:
middle = (begin + end)//2
max1 = findMax(data,begin,middle)
max2 = findMax(data,begin+1,end)
return max(max1,max2)
print(findMax(data,0,(len(data)-1)))
- 이진탐색
data = [0,2,4,6,8,10,11]
def binarysearch(data,target,start,end):
if start > end:
return None
else:
middle = (start+end)//2
if data[middle] == target:
return middle
elif data[middle] < target:
return binarysearch(data, target, middle + 1, end)
else:
return binarysearch(data,target,start,middle-1)
print(binarysearch(data,12,0,(len(data)-1)))
- 재귀함수로 구현한 팩토리얼
반응형
'Study' 카테고리의 다른 글
백준 9465: 스티커(Python) (0) | 2022.03.17 |
---|---|
백준 2193: 이친수(Python) (0) | 2022.03.17 |
백준 11057: 오르막 수(Python) (0) | 2022.03.16 |
백준 10844: 쉬운 계단 수(Python) (0) | 2022.03.16 |
백준 11727: 2xn 타일링 2(Python) (0) | 2022.03.05 |
댓글