在python中创建迭代函数而不是递归函数

时间:2017-01-23 21:16:06

标签: python recursion iteration

def sum(root):
    if root.children == []:
        return root.value
    else:
        temp = 0
        for n in root.children:
            temp += sum(n)
        temp+= root.value
    return temp

我让我的函数以递归方式工作,并试图找出一种简单的方法来迭代地完成它。我只是想找到关于我是否会使用while循环或什么的指导。

1 个答案:

答案 0 :(得分:4)

使用队列或堆栈;从队列或堆栈中获取一个元素,将值添加到运行总计中,将所有子项添加到队列或堆栈中,然后处理下一个元素。使用在队列或堆栈为空时结束的while循环。

堆栈和队列之间的唯一区别是,您要么首先处理元素深度(堆栈),要么首先处理呼吸(队列)。

您的递归代码是深度优先的,因此要迭代地复制相同的行为,请使用堆栈:

def sum_nodes_iteratively(root):
    elements = [root]
    total = 0
    while elements:
        element = elements.pop()
        elements.extend(element.children)
        total += element.value
    return total

演示:

>>> class Node(object):
...     def __init__(self, value, children):
...         self.value = value
...         self.children = children
...
>>> def sum_nodes_iteratively(root):
...     elements = [root]
...     total = 0
...     while elements:
...         element = elements.pop()
...         elements.extend(element.children)
...         total += element.value
...     return total
...
>>> sum_nodes_iteratively(Node(1,[Node(2,[]),Node(3,[Node(4,[Node(5,[]),Node(6,[Node(7,[])])])])]))
28