1. 입력된 숫자가 모든 값의 합보다 큰지 검사한다. (작아야함)
2. 입력된 값을 매개변수와 처음 키값을 받아 경우의 수를 구하는 함수를 실행시킨다.
어떤식으로 동작하는 함수냐면
처음엔 키 값중에 가장 큰 유효한 값을 정하고 다시 재귀적으로 그 함수를 아까 정한 유효한 키값을 빼고 호출하는거지
즉 입력된 숫자 조합을 같이 넘겨진 매개변수보다 작은 숫자들의 조합으로 찾아내는 함수를 만드는거야.
------------------------------------
예를 들어
a : 7
b : 5
c : 4
d : 3
e : 2
f : 2
g : 1
h : 1
이렇게 있으면 25이하의 숫자조합이 가능하넴
14입력했다 치자
자 처음 함수를 호출하는건 func(infinite, 14) 이렇게임 (얘가 함수 1이야)
그 함수1 안에서 첫번째에 들어갈 숫자를 정하겠지? a=7을 정했다고 치자
그럼 func(7, 7) 이렇게 재귀적으로 호출댈거야 (얘가 함수2야) - 함수 1안에서 호출된거야
그 함수2 안에서 7보다 작은 얘를 하나 정해서 하겠지?
b=5를 정했네
그리고 나서 다시 func(5, 2)이렇게 함수3을 호출할거야
함수3안에서 다시 e = 2를 정하는데 0이 되었지 조합이 하나 완성되엇어, 하지만 그걸 리턴하기전에 모든 경우의 수를 다 훝어야해
그래서 또 g=1을 정해서 함수4 func(1,1)을 호출하고 함수 4에서 h=1을 정해서 더이상 경우의 수가 없으니 리턴을 할거야
그럼 함수3으로 돌아오겟지 거기서 2 | 1,1을 리턴하겠지? (여기서도 더 경우의 수가 없으니)
함수2로 돌아왔다. 함수 2에서는 5, 2 | 5 , 1 ,1 을 정했지? 5 다음 숫자를 정해서 다시 재귀적으로 함수를 호출하면 다른 경우의 수도 구할수 있겠지?
이런식으로 하는거임
이해 못하겠지? 미안..
댓글 0