Python Algorithm Study - Week 5, 6
2017-08-17
Problem Solving with Algorithms and Data Structures using Python ์ฑ ์ ์ฝ์ผ๋ฉฐ ์คํฐ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ์ฌ ์ฐ์ฌํฉ๋๋ค.
recursive function
is a function that calls itselfRecursion์ด๋ ๋ฌธ์ ๋ฅผ ๊ฐ์ฅ ์์ ๋จ์๊น์ง ์ชผ๊ฐ์ ํด๊ฒฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ํจ์๋ฅผ ๋ฐ๋ณตํด์ ํธ์ถํ๋ฉฐ ๊ฐ์ฅ ์์ ๋จ์๊น์ง ๋ด๋ ค๊ฐ๊ธฐ๋ง ํด๋ ํฐ ๋จ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์๋๋ ๋ฆฌ์คํธ์ ๋ชจ๋ ๊ฐ์ ๋ํ๋ recursiveํ ํจ์์ด๋ค.
# Recursive sum
list = [2, 4, 6, 8, 10]
def recursive_sum(list):
if len(list) == 1: # base-case
sum = list[0]
return sum
else:
sum = list[0] + recursive_sum(list[1:])
return sum
์ฌ๊ธฐ์ len(list) == 1
์ธ ๊ฒฝ์ฐ๋ฅผ ์ ์ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ฐ, ์ด๋ฅผ base case ๋ผ๊ณ ๋ถ๋ฅธ๋ค. Recursion์์๋ base case๋ฅผ ์ ์ ์ํ๋ ๊ฒ์ด ์ ์ผ ์ค์ํ๋ค. ๋ฐ๋ณตํด์ ๋์๊ฐ๋ recursive function์ด ์ข
๋ฃ๋๋ ์กฐ๊ฑด์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ์ฅ ์์ recursive function ์ ์ ์ํ๋ฉด ๋๋จธ์ง๋ ๊ทธ๋ฅ ํจ์๋ฅผ recursiveํ๊ฒ ๋ถ๋ฌ์ค๊ธฐ๋ง ํ๋ฉด ๋๋ค.
# Recursive factorial
def fact(n):
if n <= 1:
return 1
else:
return n * fact(n-1)
์ฌ๊ธฐ์ base case๋ n์ด 1๋ณด๋ค ์์ ๋์ด๋ค. 1๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ ์๊ธฐ ์์ ์ ๊ณ์ ๋ถ๋ฌ์ค๋ฉฐ base case๋ฅผ ํฅํด ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค.
# % ๋ ๋๋จธ์ง, // ๋ ๋ชซ
def toStr(n, base):
convertString = "0123456789ABCDEF"
if n < base:
return convertString[n]
else:
return toStr(n // base, base) + convertString[n % base]
์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ ๋ฆฌ์คํธ์์ ํน์ ๊ฐ์ ์ฐพ๋ ๋ฐฉ๋ฒ. ํฐ ๊ฐ(high)๊ณผ ์์ ๊ฐ(low)์ด ์๊ณ ์ค๊ฐ๊ฐ(mid)์ด ๊ทธ ์ฌ์ด์ ์๋์ง ๋ณด๋ฉด์ ํด๋น ๊ฐ์ ์์น๋ฅผ ์ฐพ๋๋ค.
def binary_search(data, target, low, high):
if low > high:
return False
else:
mid = (low + high) // 2
if target == data[mid]:
return True
elif target < data[mid]:
return binary_search(data, target, low, mid-1)
else:
return binary_search(data, target, mid+1, high)
Fractal