2010-07-01 68 views
1

请建议我解决以下问题问题有关递归

考虑功能

function recurse(a): 

    for child in a.childs: 

     recurse(child) 

现在我想执行一些代码可以说

print "Program ends here" 

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

谢谢

回答

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布尔值),效率会有另一个边际损失。

0

我可能会误解你的问题,但最高水平完成时递归将完成。

一个包装递归的新功能()可以这样做:

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

你的意思是这样的吗?

recurse(something) 
print "Program ends here" 

当递归函数完成后,程序将继续执行下一条语句,就像使用其他函数一样。函数是递归的并不重要。

0

将第一次调用后的打印语句放到递归中。

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

你可以使用默认参数:

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

recurse(a)