JS Star 블로그

기억보다는 기록을✏️ 머신러닝, 웹개발, 물리학을 공부했고 계속 배워가고 있습니다.
📌 기존에 포스팅하던 블로그에서 포스트를 옮기는 중입니다.

[자주하는실수] 재귀의 return

03 Sep 2020 » algorithm

재귀의 return

주어진 arr 안에서 2개를 선택하는 문제다.

def combination(m, arr):
    # DFS
    chosen = []
    index = []

    def dfs(arr, nxt):
        if len(chosen) == 2:
            return chosen

        for i in range(nxt, len(arr)):
            chosen.append(arr[i])
            index.append(i+1)
            dfs(arr, i+1)
            chosen.pop()
            index.pop()
    
    result = dfs(arr, 0)
    print(result)
    return result
    
combination(4, [1, 4, 5, 3, 2])

최종값을 return하기 위해 result = dfs(arr, 0) 과 같이 값을 return하면 None 이 나온다. 그래서 result라는 list을 따로 만들어 매번 저장하면 된다.

def combination(m, arr):
    result = []
    chosen = []
    index = []

    def dfs(arr, nxt):
        if len(chosen) == 2:
            result.append([chosen[0], chosen[1]])
            return

        for i in range(nxt, len(arr)):
            chosen.append(arr[i])
            index.append(i+1)
            dfs(arr, i+1)
            chosen.pop()
            index.pop()
    
    dfs(arr, 0)
    print(result)
    return result

combination(4, [1, 4, 5, 3, 2])

#[[1, 4],
# [1, 5],
# [1, 3],
# [1, 2],
# [4, 5],
# [4, 3],
# [4, 2],
# [5, 3],
# [5, 2],
# [3, 2]]