파이썬 알고리즘

재귀 심화: 조합과 중복조합

뜻 지, 깨달음 오 2022. 10. 31. 22:03

path 배열안에 문자를 비교하면서 조합을 출력하는 방법 (참고용… 쓰지말기)

arr=['a','b','c','d']
path=['']*3

def abc(level):
    if level==3:
        for i in range(3):
            print(path[i],end='')
        print()
        return

    for i in range(4):
        #1 path[level-1] -> 그전 단계에서 타고 들어온 곳
        #2 arr[i] -> 앞으로 들어갈 가지
        #3 그전 들어온 가지 < 앞으로 들어갈 가지  (True)
        if level>0 and path[level-1] >= arr[i]: continue
        path[level]=arr[i]
        abc(level+1)

abc(0)

for문의 i값의 변화를 이용한 조합 출력하기

A B C
A B D
A C D
B C D
arr=['a','b','c','d']
path=['']*3

def abc(level,start):
    if level==3:
        print(*path)
        return

    for i in range(start,4):
        path[level]=arr[i]
        abc(level+1,i+1)

abc(0,0)  #level start

for문의 i값의 변화를 이용한 중복조합 출력하기

A A A
A A B
A A C
A A D
A B B
A B C
A B D
A C C
A C D
A D D
B B B
B B C
B B D
B C C
B C D
B D D
C C C
C C D
C D D
D D D
arr=['a','b','c','d']
path=['']*3

def abc(level,start):
    if level==3:
        print(*path)
        return

    for i in range(start,4):
        path[level]=arr[i]
        abc(level+1,i)

abc(0,0)  #level start