从前有一位聪明的仆人,他救下了一位王子的性命。 国王答应,仆人想要什么,就赏他什么。 仆人知道国王喜欢下国际象棋,便告诉国王,他想要麦粒。 棋盘的第一格放一粒麦粒,之后每一格的数量都翻一倍。
计算棋盘上的小麦粒数。
棋盘有 64 个格子。 第 1 格有 1 粒小麦,第 2 格有 2 粒,第 3 格有 4 粒,以此类推,每格数量翻倍。
编写代码来计算:
这类问题(答案依赖于前一个答案)通常被称为递归。 实现递归的方式有多种,如果你还不熟悉,不妨去查一查相关资料。 Pharo 对递归做了很好的优化,它也是一种常用的模式。
注意:在原始的问题规范中,grainsCalculator 是通过 #square 调用的,不过我们把这个方法重命名为 #atSquare:,这个名字更像 Smalltalk 的风格,也更能表达出你是在请求“某个方格上”的答案。