我有以下功能:
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
我似乎无法弄清楚为什么我输错了答案。一些见解会非常有用,我将非常感激。
答案 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
看到区别?