请建议我解决以下问题
考虑一个功能
function recurse(a):
for child in a.childs:
recurse(child)
现在我想执行一些代码,让我们说
print "Program ends here"
当程序完成递归时,我怎么知道递归何时结束?
谢谢
答案 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!"