Python 当我运行这段代码时,它将循环3000次以上
我只是试着跑步和玩一些def来训练自己,不小心 当我到处调用这个函数时,它会反复循环,直到达到3000次。Python 当我运行这段代码时,它将循环3000次以上,python,Python,我只是试着跑步和玩一些def来训练自己,不小心 当我到处调用这个函数时,它会反复循环,直到达到3000次。 为什么数到3000次,然后停下来 def print_two(*args): arg1, arg2 = args print "arg1: %r, arg2: %r" %(arg1, arg2) print_no_thing() def print_no_thing(): print ("No thing ") print_two_again("
为什么数到3000次,然后停下来
def print_two(*args):
arg1, arg2 = args
print "arg1: %r, arg2: %r" %(arg1, arg2)
print_no_thing()
def print_no_thing():
print ("No thing ")
print_two_again("me and ", "you")
def print_two_again(arg1,arg2):
print "arg1:%r, arg: %r" %(arg1,arg2)
print_two("pack","packer")
print_two_again("cool", "cooler")
假设问题是您不想循环,那么您需要一个所谓的
终端条件
。目前:
调用print\u two\u再次
print\u two
callsprint\u two
print\u no\u thing
再次调用print\u no\u thing
print\u two\u
条件子句
,因此函数将继续相互调用,并且永不停止。你需要插入一些东西,让它退出。有两种方法可以做到这一点:
- 不要让最后一个函数调用第一个函数
- 跟踪循环次数并最终停止
def print_two(*args):
arg1, arg2 = args
print "arg1: %r, arg2: %r" %(arg1, arg2)
print_no_thing()
def print_no_thing():
print ("No thing ")
def print_two_again(arg1,arg2):
print "arg1:%r, arg: %r" %(arg1,arg2)
print_two("pack","packer")
print_two_again("cool", "cooler")
第二项:
# Note that you shouldn't actually use global variables, but this is clear for demonstration purposes
max_loops = 100
current_loops = 0
def print_two(*args):
arg1, arg2 = args
print "arg1: %r, arg2: %r" %(arg1, arg2)
print_no_thing()
def print_no_thing():
print ("No thing ")
if max_loops > current_loops:
current_loops += 1
print_two_again("me and ", "you")
def print_two_again(arg1,arg2):
print "arg1:%r, arg: %r" %(arg1,arg2)
print_two("pack","packer")
print_two_again("cool", "cooler")
它目前停在三千的原因是您达到了Python的最大递归深度。每个函数都将创建一个新的“堆栈帧”,因为您永远不会从函数返回(只调用新函数),所以您只能添加新的堆栈帧。最终您将耗尽(当您达到最大递归深度时)。更多信息,请参阅
注意,虽然可以使用最大递归深度,但不建议使用<代码>3000
远远超出了绝大多数用例的需要。酷。你有问题吗?还要考虑你的格式化,以便我们可以阅读它(选择文本并点击CTRL K)你的问题是什么?“终端条件”听起来像医生告诉我的…我一直听说它被称为“停止条件”…@rubesmoker很公平,但我把它作为终端条件
或终止条件
,或基本情况
(如果你真的在做递归)。呵呵,好的。我猜是程序员的幽默;-)<代码>暗色的字母数与代码
的字母数相同,毕竟…;-)