def count_change(change, coins): from math import ceil count = 0 coin, coins = coins[0], coins[1:] if change % coin == 0: count += 1 if not coins: return count for i in range(ceil(change / coin)): count += count_change(change - i * coin, coins) return count def euler_031(): return count_change(200, [200, 100, 50, 20, 10, 5, 2, 1]) if __name__ == "__main__": print("e031.py: {}".format(euler_031())) assert(euler_031() == 73682)