我知道序列如下:
2, 10, 10, 130, 130, 130, 130, 130, ..., a₁₅=130, 17290, ...
我的功能从n > 3
开始,否则在a₁, a₂, a₃ = 2, 2, 2
时返回a₁, a₂, a₃, a₄ = 2, 10, 10, 130
。
这是我到目前为止所拥有的:
def s(n):
if n == 1:
return 2
elif math.floor(math.sqrt(n)) == math.floor(math.sqrt(n-1)):
return s(n-1)
else:
return s(n-1) ** 2 + 3 * s(n-1)
它有什么问题?
请注意,我试图返回序列的 nth term 而不是整个序列,直到n。
答案 0 :(得分:5)
这是一个棘手的递归,因为它没有像大多数简单的递归定义那样提到 a n -1 。这意味着您的代码中不应该包含s(n-1)
个引用。
在等式中,floor(sqrt(n))
是 a n 的参数。由于您调用函数s
,因此您应该将floor(sqrt(n))
传递给s
的递归调用。
def s(n):
if n == 1:
return 2
else:
x = s(math.floor(math.sqrt(n)))
return x**2 + 3*x
由于 a ⌊√ n ⌋出现两次,上面的代码计算一次并调用该值x
。