类似于黄金比率的递归算法

问题描述 投票:-1回答:2

给定有限序列的正整数[a0,a1,...,an](长度为n + 1),通过递归公式定义一个新的有限序列[b0,b1,...,bn]

Bin =那个+ 1 / bin -1

例如:

b0 = a0 b1 = a1 + 1 / b0 = a1 + 1 / a0 b2 = a2 + 1 / b1 = a2 + 1 /(a1 + 1 / a0) b3 = i + 1 / b2 = i + 1 /(a2 + 1 /(a1 + 1 / a0)) 。 。 。 bn = an + 1 / bn-1 = an + 1 /(... + 1 / a0)

编写一个名为sequence_to_fraction的函数,它接受一个输入参数a(正整数的Python列表[a0,a1,...,an])并返回上面定义的序列中的最后一个数字bn

Bin =那+ 1 /(即-1 + 1 /(... + 1 / a 0))

到目前为止,这是我现在的代码。而且我不知道还有什么可以补充来完成这个。截至目前,我的索引超出范围错误。接下来我该怎么办?

def sequence_to_fraction(a):

    b = [0]
    b[0] = a[0]

    for i in range(0,len(a)+1):
        b[i] = a[i] + 1/b[i-1]
        b.append(b[i])
        b[i-1] = b[i]

    return b[len(b)+1]
python python-3.x recursion
2个回答
0
投票

对于递归解决方案,请参阅bn如何使用bn-1(当n> 0时)。基本情况是当n = 0并且递归应该停止。后一种情况发生在输入列表只有一个元素时:

def sequence_to_fraction(a):
    if len(a) == 1:
        return a[0]
    return a[-1] + 1/sequence_to_fraction(a[:-1])

请注意在定期调用中如何传递a[:-1]:这是没有最后一个元素的列表的副本;所以它是一个较短的元素。


0
投票

您已经处理了i = 0的特殊情况,因此循环应该从1开始。

循环应遍历0后的所有元素,因此它应该计数到a中的最后一个有效索引。那不是len(a)+1。

您尝试将其分配给尚不存在的b [i]。相反,只需附加您计算的数字(或将其存储在临时变量中以提高可读性并使调试更容易)。

您还会在return语句中错误地获取b中的最后一项。同样,len(b)+1不正确。

(代码故意不发布,因为这是作业,但这应该足以让你到那里)

© www.soinside.com 2019 - 2024. All rights reserved.