【发布时间】:2010-11-12 21:38:16
【问题描述】:
有没有办法以非递归方式执行以下操作:
my_list = [
"level 1-1",
"level 1-2",
"level 1-3",
[
"level 2-1",
"level 2-2",
"level 2-3",
[
"level 3-1",
"level 3-2"
]
],
"level 1-4",
"level 1-5"
]
def print_list(the_list, indent_level=0):
for item in the_list:
if isinstance(item, list):
print_list(item, indent_level + 1)
else:
print "\t" * indent_level, item
print_list(my_list)
【问题讨论】:
-
这是一个谜题还是真的需要某个地方?我很好奇。
-
只是试图找到解决此类问题的最有效方法。这不是一个难题,但我提供的代码只是一个示例。
-
这也是标准的第一年或第二年 CS 算法。 :)
-
另请注意,迭代执行此操作不一定比递归执行此操作更快。事实上,在快速测试中(100k 运行没有输出),你的代码是最快的:1600ms;我的是1750,马丁的是2000ms。具有大量非叶节点的图的平衡可能会有所不同,因为它会递归更多。
-
通过非递归执行它并不会真正购买太多,因为您无法避免周围有堆栈(假设可能无限深度)。