我试图写一个递归的multinacci函数(基本上是斐波纳契数,除了兔子在每个繁殖周期产生k对而不是1对)函数,我希望它能处理所有n。到目前为止,我的代码是:from functools import lru_cache
from sys import getrecursionlimit, setrecursionlimit
def fibnum(n, k=1):
"""Returns the nth fibonacci number of order k"""
# check if recursionlimit needs increasing
return _fibnum(n, k)
@lru_cache(maxsize=None)
def _fibnum(n, k):
if n <= 0:
return 0
if n == 1:
return 1
return _fibnum(n-1, k) + k * _fibnum(n-2, k)
关于代码的一些注意事项:第一个函数是第二个函数的包装器,这样描述文本看起来就正确了。第二个功能是记忆化的,这大大提高了性能。在
我注意到,当我试图寻找fibnum的递增值(100、400、1000等)时,我可以绕过递归限制,因为记忆化缩短了递归。我希望能够立即运行我的函数来处理任何数字。我尝试过测试n的递归限制的界限,然后将递归限制设置为该范围,但唯一可行的方法是n2,但这似乎太高了。在
有什么建议吗?在
注意:稍后,我想在公式中添加一个寿命(基本上是减去fibnum(n-life_span,k))。这将如何影响所需的递归深度?在