表达递归序列

use*_*535 -2 python recursion sequence

我有这个顺序:

2, 10, 10, 130, 130, 130, 130, 130, ..., a??=130, 17290, ...
Run Code Online (Sandbox Code Playgroud)

我的函数从开始工作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)
Run Code Online (Sandbox Code Playgroud)

它出什么问题了?

请注意,我正在尝试返回序列的第n个项而不是整个序列,直到n.

Joh*_*ica 5

这是一个棘手的递归,因为它没有提到一个ñ -1任何地方像极简单的递归定义做.这意味着您s(n-1)的代码中不应包含任何引用.

在该等式中,floor(sqrt(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
Run Code Online (Sandbox Code Playgroud)

由于一个⌊√ Ñ示出了两次,上面的代码计算一次,并调用该值x.