규칙을 발견해서 풀었다라고 보셨는데 그렇게 보실 수도 있지만 0과 1이 호출되는 횟수가 피보나치 수열을 이루는것은 수열 특성상 자연스럽게 그렇게 되는 것입니다
fibo(n)은 fibo(n)이 fibo(1)을 호출한 횟수와 같고 fibo(n - 1)은 fibo(n)이 fibo(0)을 호출한 횟수와 같은데
fibo(n - 1)에서 0을 호출한 횟수 + fibo(n - 2)에서 0을 호출한 횟수 = fibo(n)에서 0을 호출한 횟수이며
fibo(n - 1)에서 1을 호출한 횟수 + fibo(n - 2)에서 1을 호출한 횟수 = fibo(n)에서 1을 호출한 횟수입니다
호출 횟수를 나타내는 수열의 점화식이 피보나치와 같으니 당연히 피보나치 수열과 동일해지는 것입니다
fibo(1)에서 1호출횟수는 fibo(1)과 같고 0호출횟수는 fibo(0)과 같으므로 이를 초항으로 잡으면 됩니다
그리고 전역변수로 각각 카운팅하는 방법은 메모이제이션을 하지 않았을때 유효한 방법 아닐까요?
injoon2018 5년 전
풀다가 도저히 안풀려서 질문게시판의 다른 분들 질문과 코드를 봤는데
대부분 규칙을 발견하셔서 풀으셨더라고요. 0과 1이 몇 번 호출되는지 그 조차도 피보나치 수열이더라고요.
그 방법이 더 좋지만, 구현을 하다보니 구현에 대한 욕심이 있는데
메모이제이션을 쓰면, 이미 구한 답은 함수를 들어가지 않으니, 전역변수로 0과 1의 함수를 들어갈때마다 ++ 하는 방식으로 구현은 불가능한가요?