import sys
sys.setrecursionlimit(10)
def bounce(n):
if n <= 0:
print(n,)
bounce(n+1)
else:
print(n)
bounce(n - 1)
if (n==0 ):
n==False
我正在尝试创建一个倒计时和倒计时程序。我只能选择使用一个函数,而且必须使用递归函数。但每次我运行这个程序时,它不会做任何事情:
^{pr2}$我该怎么做才能让倒数计时正常工作呢?应该是这样的:
>>> bounce(4)
4
3
2
1
0
1
2
3
4
>>> bounce(0)
对问题的解决方案进行猜测是很好的,但是在把你提出的解决方案作为你的问题的框架时。你要做的是倒计时,然后倒计时,而不是停止递归。停止递归需要添加
exit()
作为递归的base case,这是不合适的;正常的程序执行让call stack自然地解析(即,return
到它的调用方)。也不建议修改sys.setrecursionlimit(10)
,因为它人为地操纵了一个全局限制,这很容易通过适当的基本情况条件在本地完成。在这里有一种方法:在递归调用堆栈中向下打印
n
,然后在到达基本情况后返回的路上打印n
。换言之,每个函数都会立即打印其编号,但在其下面的所有递归函数都已打印并解析其编号之前,不会再次打印其编号。在例如,第一个名为}来完成它们的工作,
bounce(4)
的函数立即打印4
,然后等待bounce(3)
、bounce(2)
、bounce(1)
和{return
。完成后,bounce(4)
最后在返回调用范围之前再次打印4
。所有被调用的函数的行为都是相同的(bounce(0)
有点不同;我们必须有条件地将其限制为单个打印以满足要求if n:
测试数字是否为非零)。在输出:
^{pr2}$和一个实验用的repl。在
如果您无法理解调用堆栈的工作方式,请尝试添加缩进来显示您的深度(时间从上到下增加,递归深度从左到右增加)。在
相关问题 更多 >
编程相关推荐