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

将递归函数转换为for和while循环[Python],python,python-3.x,for-loop,recursion,while-loop,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 我似

我有以下功能:

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

我似乎不明白为什么我输出了错误的答案。一些见解将非常有用,我将非常感激。

问题在您的for循环中,您使用
((I-1)+2*(I-2))增加

如果您理解了原始函数,它实际上应该是增量
sum
,之前计算的值存储在
h(i-1)
h(i-2)

以下是我对for循环函数的修复:

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]
h(0) = 0
h(1) = 3
h(n) = h(n-1) + 2 * h(n-2), for n>= 2

问题在您的for循环中,您使用
((i-1)+2*(i-2))
递增

如果您理解了原始函数,它实际上应该是增量
sum
,之前计算的值存储在
h(i-1)
h(i-2)

以下是我对for循环函数的修复:

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]
h(0) = 0
h(1) = 3
h(n) = h(n-1) + 2 * h(n-2), for n>= 2

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


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


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

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

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

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

具有原始功能:

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

看到与原始功能的区别了吗?

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

看到区别了吗?

可能重复我不同意的一个是java OP用pythonIt编写的,如果您准确地解释发生了什么,而不是含糊其辞地说存在“问题”,可能会有所帮助。代码根本不运行吗?它会引发异常吗?它会产生不正确的结果吗?如果是,结果与您预期的结果有什么不同?@cowbert第一个不是java,而是一个函数系统。我的任务是用Python编写这些函数系统。我的印象是语言不是问题所在,但OP所寻找的是将递归函数转换为迭代代码的技术。我不同意的一个可能的副本是java。OP用Python编写的java,如果你能准确解释发生了什么,可能会有所帮助,而不是含糊其辞地说有一个“问题”。代码根本不运行吗?它会引发异常吗?它会产生不正确的结果吗?如果是,结果与您预期的结果有什么不同?@cowbert第一个不是java,而是一个函数系统。我的任务是用Python编写这些函数系统。我的印象是语言不是问题所在,但OP所寻求的是将递归函数转换为迭代代码的技术。