アルゴリズム-再帰アルゴリズム
再帰アルゴリズム
재귀 알고리즘
:再び自分を呼ぶ# 재귀 알고리즘
def recursion(num):
if num > 0 :
print('*'*num)
return recursion(num-1)
else:
return 1
ハノイタワー
하노이 탑
:パズルゲームの一種で、3本の柱で円板を別の柱に移す.# 하노이 탑 이동 순서 출력
def hanoi(start, to, end, n):
if n == 1:
print(start, end)
else:
hanoi(start, end, to, n-1)
print(start, end)
hanoi(to, start, end, n-1)
配置
1.連結ソート
병합 정렬
:データ構造を分割し、分割されたデータ構造ごとに並べ替えてから、連結並べ替えを行う# 병합 정렬
def mSort(ns):
if len(ns) < 2:
return ns
midIdx = len(ns) // 2
leftNums = mSort(ns[:midIdx])
rightNums = mSort(ns[midIdx:])
mergeNums = []
leftIdx = 0; rightIdx = 0
while leftIdx < len(leftNums) and rightIdx < len(rightNums):
if leftNums[leftIdx] < rightNums[rightIdx]:
mergeNums.append(leftNums[leftIdx])
leftIdx += 1
else:
mergeNums.append(rightNums[rightIdx])
rightIdx += 1
mergeNums = mergeNums + leftNums[leftIdx:]
mergeNums = mergeNums + rightNums[rightIdx:]
return mergeNums
nums = [8, 1, 4, 3 ,2, 5, 10, 6]
print('mSort(nums) : {}'.format(mSort(nums)))
2.クイックソート
퀵 정렬
:標準値より小さい値と標準値より大きい値とを分けて再結合します.5
] | [8, 10, 6, 8] 3
] | [4, 4] | [5] | [ 6
] | [8, 8, 10] 2
] | [3] | [4] | [ 4
] | [5] | [6] | [ 8
] | [8][10] # 퀵 정렬
def qSort(ns):
if len(ns) < 2 :
return ns
midIdx = len(ns) // 2
midVal = ns[midIdx]
smallNums = []
sameNums = []
bigNums = []
for n in ns:
if n < midVal:
smallNums.append(n)
elif n == midVal:
sameNums.append(n)
else:
bigNums.append(n)
return qSort(smallNums) + sameNums + qSort(bigNums)
nums = [8, 1, 4, 3, 2, 5, 10, 6]
print('not sorted nums : {}'.format(nums))
print('sorted nums : {}'.format(qSort(nums)))
Reference
この問題について(アルゴリズム-再帰アルゴリズム), 我々は、より多くの情報をここで見つけました https://velog.io/@skarb4788/알고리즘-재귀-알고리즘テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol