해결할 문제를 고려해서 반복이나 재귀의 방법을 선택
일반적으로, 재귀적 알고리즘은 반복 알고리즘보다 더 많은 메모리와 연산을 필요로 함
입력 값 n이 커질수록 재귀 알고리즘은 반복에 비해 비효율적일 수 있다
def perm(i,k):
'''
param
i : 값을 결정할 인덱스
k : 결정할 개수
'''
if i == k :
print(*p)
else:
for j in range(i,k): # 자신부터 오른쪽 원소들과 교환
p[i], p[j] = p[j], p[i]
perm(i+1,k)
p[i], p[j] = p[j], p[i]
p = [1,2,3]
perm(0,3)
'''
결과
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2
'''
def perm(i,k):
if i == k:
print(*p)
else:
for j in range(k): # 첨부터 끝까지
if used[j] == 0: # 사용하지 않은 자리면
p[i] = A[j]
used[j] = 1 # 사용
perm(i+1, k)
used[j] = 0 # j번 자리 숫자를 다른 자리에서 쓸 수 있게
A = [1,2,3]
p = [0] * 3
used = [0]*3
perm(0,3)
'''
결과
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
'''