给定有限序列的正整数[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])并返回上面定义的序列中的最后一个数字bnBin =那+ 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]
对于递归解决方案,请参阅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]
:这是没有最后一个元素的列表的副本;所以它是一个较短的元素。
您已经处理了i = 0的特殊情况,因此循环应该从1开始。
循环应遍历0后的所有元素,因此它应该计数到a中的最后一个有效索引。那不是len(a)+1。
您尝试将其分配给尚不存在的b [i]。相反,只需附加您计算的数字(或将其存储在临时变量中以提高可读性并使调试更容易)。
您还会在return语句中错误地获取b中的最后一项。同样,len(b)+1不正确。
(代码故意不发布,因为这是作业,但这应该足以让你到那里)