带冗余计算的分岔递归计算

2021-02-22 14:22

def T(n):如果n<;=0:返回1否则:返回T(n-1)+(n-1)*T(n-2)打印T(4)I需要一种有效的方法来打印使用上述递归关系生成的函数T(n)的输出。有没有办

解答动态

  • 如果你不能使用functools.cache或者functools.lru\u缓存如果你不明白或者不想使用解析者,如另一个答案所示,这里是一种低技术的记忆方法。请注意,functools方法更简单、更健壮,等等。但是如果您不担心所有这些,只需要比当前方法快得多的简单代码,这就可以了。
    def T(n):if n not in T.cache:if n<;=0:T.cache[n]=1 else:T.cache[n]=T(n-1)+(n-1)*T(n-2)return T.cache[n]#初始化cache.T.cache={}

    • 还有一个选项是根本不递归,而是计算序列,直到得到所需的项。这不仅避免了原始算法的指数复杂度,还避免了记忆化的至少线性(以计数值为单位)内存复杂度。(递归/记忆体化还可能遇到特定于实现的问题,例如递归深度错误或内存错误,这与下面的代码无关。)
      def T(n):如果n<;=0:返回1#将a,b设置为T(-1),T(0)a,b=1,1表示范围(n)中的i:#将a,b从T(i-1),T(i)更改为T(i),T(i+1)a,b=b,b+i*a#i=n-1将b设置为T(n)返回b

      • 您应该使用iflt;=0:返回1,否则:返回T(n-1)+(n-1)*T(n-2)

        • End

        免责声明:

        本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。