むかしむかし、王子の命を救った賢い召使いがいました。 王様は、召使いが望むものなら何でも報酬として与えると約束しました。 王様がチェスを愛していることを知っていた召使いは、小麦の粒がほしいと王様に伝えました。 チェス盤の最初のマスに1粒、次のマスからはマスが進むごとに粒の数が2倍になるように、と。
チェス盤の上にある小麦の粒の数を計算しましょう。
チェス盤には64のマスがあります。 1マス目には1粒、2マス目には2粒、3マス目には4粒、というように、マスが進むごとに2倍になっていきます。
次のものを計算するコードを書きましょう。
この種の問題(答えが前の答えに依存するもの)は、再帰と呼ばれることがよくあります。 再帰を書く方法にはいくつかあります。なじみがない場合は、調べてみる価値があるでしょう。 Pharoは再帰に最適化されていて、よく使われるパターンです。
注意:元の問題仕様では、grainsCalculatorは#squareで呼び出されますが、このメソッドは#atSquare:に改名しました。これはよりSmalltalkらしい名前で、答えを「at a square」で求めていることをよく表しています。