繁体   English   中英

将此函数从递归转换为迭代

[英]Convert this function from recursive to iterative

def g(n):
"""Return the value of G(n), computed recursively.

>>> g(1)
1
>>> g(2)
2
>>> g(3)
3
>>> g(4)
10
>>> g(5)
22
"""
if n<=3:
    return n
else:
    return g(n-1)+2*g(n-2)+3*g(n-3)

如何将其转换为迭代函数? 直到现在,我才意识到编写递归函数有时比编写迭代函数更容易。 之所以这么难我觉得是因为不知道函数在做什么操作。 在递归中,发生了什么并不明显。

我想写一个迭代定义,我知道我需要使用一个 while 循环,但是每次我尝试写一个时,我要么向 g_iter(n) 添加额外的参数(当应该只有一个时),或者我做一个递归调用。 有人至少可以让我走上正确的道路吗? 你不必给我一个完整的解决方案。

仅供参考:我们还没有了解我在所有这些页面上看到的所有太常见的“堆栈”。 我宁愿远离这个。

def g_iter(n):
"""Return the value of G(n), computed iteratively.

>>> g_iter(1)
1
>>> g_iter(2)
2
>>> g_iter(3)
3
>>> g_iter(4)
10
>>> g_iter(5)
22
"""
"*** YOUR CODE HERE ***"
def g(n):
    if n <= 3:
        return n
    a, b, c = 1, 2, 3
    for i in range(n - 3):
        a, b, c = b, c, c + 2 * b + 3 * a
    return c

更新对评论的响应,不使用for循环。

def g(n):
    if n <= 3:
        return n
    a, b, c = 1, 2, 3
    while n > 3:
        a, b, c = b, c, c + 2 * b + 3 * a
        n -= 1
    return c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM