반복과 재귀는 유사한 작업을 수행할 수 있다.
수행하는 작업이 완료될 때 까지 계속 반복
재귀는 주어진 문제의 해를 구하기 위해 동일하면서 더 작은 문제의 해를 이용하는 방법
for i in range(1,4):
for j in range(1,4):
print(f'{i}{j}')
# 11
# 12
# 13
# 21
# 22
# 23
# 31
# 32
# 33
반복문으로는 n번 반복을 구현가능하고 재귀호출로 n중 for문 구현 가능
path = []
N = 3
def run(lev):
if lev == N:
print(path)
return
for i in range(1, 4):
path.append(i)
run(lev+1)
path.pop()
run(0)
값만 복사가 되는 것이다.def KFC(x):
print(x)
x += 1
print(x)
x = 3
KFC(x+1)
print(x)
# 밑의 순서대로 출력 된다
# 4
# 5
# 3
def BBQ(x):
x += 10
print(x)
def KFC(x):
print(x)
x += 3
BBQ(x + 2)
print(x)
x = 3
KFC(x + 1)
print(x)
# 4
# 19
# 7
# 3
# 0 1 2 3 4 5 4 3 2 1 0
def recur1(x):
if x == 5:
recur2(x)
return
print(x, end = " ")
x += 1
recur1(x)
def recur2(x):
if x < 0:
return
print(x, end = " ")
x -= 1
recur2(x)
recur1(0)

def recur(x):
if x == 2:
return
recur(x+1)
recur(x+1)
print(x)
recur(0)

def recur(x):
if x == 2:
return
recur(x+1)
recur(x+1)
recur(x+1)
print(x)
recur(0)
# Depth 3, 재귀 호출 4
def recur(x):
if x == 3:
return
recur(x + 1)
recur(x + 1)
recur(x + 1)
recur(x + 1)
recur(0)
# Depth 3, 재귀 호출 4
def recur(x):
if x == 3:
return
for i in range(4):
recur(x + 1)
recur(0)
path = []
def recur(x):
if x == 3:
print(*path)
return
for _ in range(1,7):
path.append(_)
recur(x+1)
path.pop()
recur(0)
# 1 1 1
# 1 1 2
# 1 1 3
# 1 1 4
# 1 1 5
# 1 1 6
# 1 2 1
# 1 2 2
# 1 2 3
# 1 2 4
# ...
# 6 6 3
# 6 6 4
# 6 6 5
# 6 6 6
#### CASE 1
path = []
used = [False, False, False, False, False, False, False]
def recur(x):
if x == 3:
print(*path)
return
for _ in range(1, 7):
if used[_] == True : continue
used[_] = True
path.append(_)
recur(x+1)
path.pop()
used[_] = False
recur(0)
#### CASE 2
path = []
def recur(x):
if x == 3:
print(*path)
return
for _ in range(1,7):
if _ not in path:
path.append(_)
recur(x+1)
path.pop()
recur(0)
# 1 2 3
# 1 2 4
# 1 2 5
# 1 2 6
# 1 3 2
# 1 3 4
# 1 3 5
# 1 3 6
# 1 4 2
# 1 4 3
# ...
# 6 5 1
# 6 5 2
# 6 5 3
# 6 5 4
# 주사위
path = []
def recur(x):
if x == 2:
print(*path)
return
for _ in range(1,7):
path.append(_)
recur(x + 1)
path.pop()
recur(0)
# 1 1
# 1 2
# 1 3
# 1 4
# 1 5
# 1 6
# 2 1
# ...
# 6 3
# 6 4
# 6 5
# 6 6