#! /usr/local/bin/python3 def tarai(x, y, z, cache={}): if x <= y: return y key = (x, y, z) val = cache.get(key) if val is not None: return val val = tarai( tarai(x-1, y, z, cache), tarai(y-1, z, x, cache), tarai(z-1, x, y, cache), cache ) cache[key] = val return val print(tarai(100, 50, 0))