從前有一位聰明的僕人,他救了王子的性命。 國王承諾,只要僕人想得出來,他都會賞賜。 僕人知道國王熱愛西洋棋,便告訴國王,他想要一些麥粒。 在棋盤的第一格放一粒麥子,之後每一格的麥粒數量都是前一格的兩倍。
計算棋盤上的麥粒數量。
棋盤有 64 個格子。 第 1 格有 1 粒麥子,第 2 格有 2 粒麥子,第 3 格有 4 粒麥子,依此類推,每格加倍。
撰寫程式碼來計算:
這類問題(答案取決於前一個答案)通常稱為遞迴。遞迴有各種不同的寫法,如果你還不熟悉,或許值得去研究一下。Pharo 對遞迴做了良好的最佳化,而且這也是常見的模式。
注意:在原始的問題規格中,grainsCalculator 是透過 #square 呼叫的,不過我們把這個方法重新命名為 #atSquare:,這個名稱更有 Smalltalk 的風格,也更能說明你是在要求「某個方格上」的答案。