给出正整数的有限序列 [a 0 ,a 1 ,...,a n ] (的 长度 n + 1 ),定义一个新的有限序列 [b 0 ,b 1 ,...,b n ] 递归公式
b n = a n + 1 / b n-1
例如:
b 0 = a 0
b 1 = a 1 + 1 / b 0 = a 1 + 1 / a 0 < / sub>
b 2 = a 2 + 1 / b 1 = a 2 + 1 /(a 1 + 1 / a 0 )
b 3 = a 3 + 1 / b 2 = a 3 + 1 /(a 2 + 1 /((a 1 + 1 / a 0 ))
。
。
。
b n = a n + 1 / b n-1 = a n + 1 /(... + 1 / a 0 )编写一个名为
sequence_to_fraction
的函数,该函数需要一个输入 参数a
(正整数 [a 0 ,a 1 ,...,a n 的Python列表) ] 返回上面定义的序列中的最后一个数字 b nb n = a n + 1 /(a n-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]
答案 0 :(得分:0)
有关递归解决方案,请参阅b n 如何使用b n-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]
是如何在重复调用中传递的:这是列表的副本,没有最后一个元素;所以要短一个元素。
答案 1 :(得分:0)
您已经处理了i = 0的特殊情况,因此循环应从1开始。
循环应在0之后的a中遍历所有元素,因此它应计入a中的最后一个有效索引。那不是len(a)+1。
您尝试将其分配给尚不存在的b [i]。而是只需附加您计算出的数字(或将其存储在临时变量中以提高可读性并简化调试)。
您在return语句中还错误地获得了b中的最后一项。同样,len(b)+1不正确。
(有意将代码未发布,因为这是家庭作业,但这足以使您到达那里)