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