表达递归序列

时间:2014-09-19 23:17:58

标签: python recursion sequence

我知道序列如下:

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。

1 个答案:

答案 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