옛날에 한 왕자의 목숨을 구한 지혜로운 신하가 있었어요. 왕은 신하가 원하는 것이 무엇이든 주겠다고 약속했어요. 왕이 체스를 좋아한다는 것을 알고, 신하는 밀알을 갖고 싶다고 왕에게 말했어요. 체스판의 첫 번째 칸에는 한 알, 그다음 칸부터는 알의 수를 두 배씩 늘려서요.
체스판에 놓인 밀알의 개수를 계산해요.
체스판은 64개의 칸으로 이루어져 있어요. 1번 칸에는 밀알이 한 개, 2번 칸에는 두 개, 3번 칸에는 네 개가 놓이고, 그다음부터는 칸마다 두 배씩 늘어나요.
다음을 계산하는 코드를 작성해 봐요:
이런 종류의 문제(답이 이전 답에 의존하는 문제)를 흔히 재귀라고 불러요. 재귀를 구현하는 방법은 여러 가지가 있으니, 이 개념이 익숙하지 않다면 한번 찾아보는 것도 좋아요. Pharo는 재귀에 잘 최적화되어 있고, 자주 쓰이는 패턴이기도 해요.
참고: 원래 문제 명세에서는 grainsCalculator를 #square로 호출하지만, 여기서는 이 메서드의 이름을 #atSquare:로 바꿨어요. 이 이름이 더 Smalltalk스럽고, "정사각형에서" 답을 구한다는 의미를 더 잘 드러내요.