关于递归的问题

时间:2010-07-01 01:57:55

标签: python recursion

请建议我解决以下问题

考虑一个功能

function recurse(a):

  for child in a.childs:

      recurse(child)

现在我想执行一些代码,让我们说

print "Program ends here"

当程序完成递归时,我怎么知道递归何时结束?

谢谢

5 个答案:

答案 0 :(得分:3)

到目前为止提出的各种答案,总结为“在recurse之外做”,都很好。但是,如果你热衷于内部 recurse,那也不难(只是效率稍低):

function recurse(a, _toplevel=True):
  for child in a.childs:
      recurse(child, False)
  if _toplevel:
      print "Recursion done!"

_参数名称中的前导_toplevel表示它是私有的,因此来电者知道来传递它。

类似的解决方案涉及跟踪递归的级别(不仅是它是否是顶层,而是“你有多深”):

function recurse(a, _level=0):
  for child in a.childs:
      recurse(child, _level + 1)
  if _level == 0:
      print "Recursion done!"

虽然在其他情况下很珍贵(例如打印带有缩进的嵌套结构),但这里不需要它(与我给出的第一个解决方案相比,基于_toplevel布尔值),效率会有另一个微小的效率损失。

答案 1 :(得分:2)

你的意思是这样吗?

recurse(something)
print "Program ends here"

当递归函数完成时,程序将继续下一个语句,就像使用任何其他函数一样。函数是递归的并不重要。

答案 2 :(得分:2)

您可以使用默认参数:

function recurse(a, top=True):
    for child in a.childs:
        recurse(child, False)
    if top: print("Program ends here.")

recurse(a)

答案 3 :(得分:0)

我可能误解了你的问题,但递归将在最高级别完成时完成。

包装recurse()的新函数可以执行此操作:

function do_recursion(a):
    res = recurse(a)
    print "Program ends here"
    return res

答案 4 :(得分:0)

在第一次调用之后将print语句放到recurse。

def main():
    a = NodeOfSomeSort()
    recurse(a)
    print "Recursion done!"