将递归函数转换为for和while循环[Python]

时间:2017-10-03 20:46:58

标签: python python-3.x for-loop recursion while-loop

我有以下功能:

h(0) = 0
h(1) = 3
h(n) = h(n-1) + 2 * h(n-2), for n>= 2

我需要将它转换为for循环,while循环和递归函数。我已经找到了递归函数,但我似乎无法输出正确的答案。我对for循环的尝试是这样的:

def hForLoop(n):
    sum = 3
    for i in range(2, n):
        sum = sum + ((i - 1) + 2 * (i - 2))
    return sum

我似乎无法弄清楚为什么我输错了答案。一些见解会非常有用,我将非常感激。

4 个答案:

答案 0 :(得分:0)

问题在于你的循环,你用sum增加((i - 1) + 2 * (i - 2)) 如果您理解了原始函数,那么它应该是sum增量,其中先前计算的值存储在h(i-1)h(i-2)

这是我对for-loop功能的修复:

def hForLoop(n):
    sum = [0,3]
    for i in range(2, n+1):
        sum.append((sum[i - 1]) + 2 * (sum[i - 2]))
    return sum[n]

答案 1 :(得分:0)

您需要为循环的下一次迭代存储h(n-1)h(n-2)的中间值,您可以使用这些值来计算下一个h(n)

 def hLoop(n):

   # initally [h(2), h(1), h(0)]
   h = [3, 3, 0] 

   # And in the following: [ h(i), h(i-1), h(i-2)]
   for i in range(2,  n + 1):
      # calculate h(i)
      h[0] = h[1] + 2 * h[2]
      # move 'index' forward, h(n-1) becomes h(n-2), h(n-1) becomes h(n-0)
      h[2] = h[1]
      h[1] = h[0]

   return h[0]

答案 2 :(得分:0)

这里是仅存储系列中最后两个值的版本:

def hForLoop(n):
    prev, cur = 0, 3
    for i in range(2, n + 1):
        cur, prev = cur + prev * 2, cur
    return cur

答案 3 :(得分:0)

使用原始功能:

h(0) = 0
h(1) = 3
h(n) = h(n-1) + 2 * h(n-2), for n>= 2

你的实际代码是:

h(0) = 0
h(1) = 3
h(n) = Σ((n-1) + 2 * (n-2)), for n>= 2

看到区别?