Жив колись мудрий слуга, який урятував життя принцу. Король пообіцяв дати йому все, що той зможе забажати. Знаючи, що король любить шахи, слуга попросив зерна пшениці. Одне зерно на першій клітинці шахівниці, а на кожній наступній кількість зерен подвоюється.
Обчисліть кількість зерен пшениці на шахівниці.
Шахівниця має 64 клітинки. На клітинці 1 лежить одне зерно, на клітинці 2 лежать два зерна, на клітинці 3 лежать чотири зерна, і так далі, щоразу кількість подвоюється.
Напишіть код, який обчислює:
Такі типи задач (де одна відповідь залежить від попередньої) часто називають рекурсією. Існують різні способи писати рекурсивний код; варто пошукати додаткові матеріали, якщо ми з цим ще не знайомі. Pharo добре оптимізований для рекурсії, і це поширений прийом.
Примітка: в оригінальній специфікації задачі grainsCalculator викликають через #square, однак ми перейменували цей метод на #atSquare:. Ця назва більш характерна для Smalltalk і краще описує, що ми запитуємо відповідь «на конкретній клітинці».