DFS 문제 풀고싶어서 공부하고 있음

언어는 Kotlin인데 로직은 비슷할테니까 언어 달라도 알아봐줄거라 생각함 ㅠ


// values = [1,1,1,1,1], target = 4


class DfsTest(

    values : IntArray, target : Int

) {

    var answer = 0

    var sum = 0

    fun dfs(index : Int, ) {

        if(index == values.size) {

            if(sum == target) {

                answer++

            }

            return

        }


        dfs(index + 1, sum + values[index+1])

        dfs(index + 1, sum - values[index+1])

    }


    dfs(0,0) // start

}


이거 그 프로그래머스에 타겟찾기였나..그거 풀다 이해 안돼서 그냥 외운건데

values에 +나 -해서 target 값 나올 수 있는 경우의 수 구하는거거든


근데 dfs 재귀함수 안에 


dfs(index + 1, sum + values[index+1])

dfs(index + 1, sum - values[index+1])


이렇게 두 번 호출하잖아

근데 로그 보면 

dfs(index + 1, sum + values[index+1])

이새끼 다 돌고 나서

dfs(index + 1, sum - values[index+1])

이새끼 도는 것 같거든

재귀 함수 이해가 부족한것 같은데 어떻게 해야 쉽게 이해할 수 있음?