类似于黄金分割率的递归算法

时间:2018-10-10 17:50:23

标签: python python-3.x recursion

  

给出正整数的有限序列 [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 n

     

b 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]

2 个答案:

答案 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不正确。

(有意将代码未发布,因为这是家庭作业,但这足以使您到达那里)