Python 我尝试使用递归来解决所谓的Tribonaci序列问题
该函数应该像 Tribonaci([1,1,1],10)->[1,1,1,3,5,9,17,31,57,105] 这是我的密码Python 我尝试使用递归来解决所谓的Tribonaci序列问题,python,recursion,Python,Recursion,该函数应该像 Tribonaci([1,1,1],10)->[1,1,1,3,5,9,17,31,57,105] 这是我的密码 def tribonacci(signature, n): if n <= 3: return signature[:3] else: return tribonacci(signature, n-1).append(sum(tribonacci(signature, n-1)[-3:])) def tribona
def tribonacci(signature, n):
if n <= 3:
return signature[:3]
else:
return tribonacci(signature, n-1).append(sum(tribonacci(signature, n-1)[-3:]))
def tribonacci(签名,n):
如果n如@JonClements已经在注释中指出的,则
append
方法不会返回列表。它返回None
,因此调用方在尝试将该None
用作列表时将遇到异常
顺便说一句,进行两次相同的递归调用是低效的。这将使您的程序再次执行所有相同的工作
因此,要解决这两个问题,请一步一步地进行,如下所示:
def tribonacci(signature, n):
if n <= 3:
return signature[:3]
else:
result = tribonacci(signature, n-1)
result.append(sum(result[-3:]))
return result
如果此函数将使用不同的n值(但签名相同)被多次调用,那么如果实现memonization,那么效率将得到提高,以便可以重用早期的结果。
。append
不会返回新列表,它会修改现有列表并返回None
。。。然后,您必须小心该列表的默认可变参数,然后确保递归条件是正确的。。。试着看看你是否能在没有第一个问题的情况下让它工作,然后从那里开始。。。(这里有很多事情需要指出,你可能会犯错误,你需要理解一些概念……)非常感谢!你的评论真的很有帮助。
def tribonacci(signature, n):
if n <= 3:
return signature[:3]
else:
result = tribonacci(signature, n-1)
return result + [sum(result[-3:])]
print(tribonacci([1,1,1], 10))