プログラマ脳を鍛える数学パズル 23
手元にコインがあり、ゲーム参加に 1 枚消費する。勝てば2枚得られる。
これで、24 回ゲームできる手順は何通りあるか?
原文では 24 回戦って、コインが手元にのこる手順と書いてあるくせに、24 回ゲームに参加する手順になってるところが少しもやっと…
from functools import lru_cache START_COIN = 10 TURNS = 24 @lru_cache() def current_game(game:int , coins: int) -> int: if game == 0: # ここで coins > 0 を入れると結果が変わってくる。 return 1 if coins == 0: return 0 return current_game(game - 1, coins + 1) + current_game(game - 1, coins - 1) print(current_game(TURNS, START_COIN))
といってもそんなに複雑な事はなくて、終了条件だけ定めてやれば再起でさっくり片付く。
そして、何気に最近したのだけど、lru_cache なるデコレータが存在し、これを入れるだけでメモ化ができるという。
便利。