Optimization 有效地计算Knuth';s向上箭头符号模数

Optimization 有效地计算Knuth';s向上箭头符号模数,optimization,recursion,modulus,exponentiation,Optimization,Recursion,Modulus,Exponentiation,我已经在用备忘录作为字典了。还有什么我能做的吗?我怀疑for循环可能能够被优化。作为参考,我正在计算knuth_arrow(2,3,9,14**8) 您的i范围内的有什么问题?您从未使用过i。我不知道knuth,但如果循环不需要它,请将其删除。@Catalyst它用于重复递归b-1times抱歉,我现在看到它s=…使用s的东西。。。我的错误你的怎么了,因为我在范围内?您从未使用过i。我不知道knuth,但如果循环不需要它,请将其删除。@Catalyst它用于重复递归b-1times抱歉,我现在看

我已经在用备忘录作为字典了。还有什么我能做的吗?我怀疑for循环可能能够被优化。作为参考,我正在计算knuth_arrow(2,3,9,14**8)


您的i范围内的
有什么问题?您从未使用过
i
。我不知道knuth,但如果循环不需要它,请将其删除。@Catalyst它用于重复递归
b-1
times抱歉,我现在看到它
s
=…使用
s
的东西。。。我的错误你的
怎么了,因为我在范围内
?您从未使用过
i
。我不知道knuth,但如果循环不需要它,请将其删除。@Catalyst它用于重复递归
b-1
times抱歉,我现在看到它
s
=…使用
s
的东西。。。我的错误
memo = {}

def knuth_arrow(a, n, b, m):
    if (a, n, b) in memo:
        return memo[(a, n, b)]

    if n == 0:
        return (a*b) % m

    if n == 1:
        s = pow(a, b, m)
        memo[(a, n, b)] = s
        return s

    if n > 1:
        s = a
        for i in range(b-1):
            s = knuth_arrow(a, n-1, s, m)

        memo[(a, n, b)] = s
        return s