我理解递归是如何工作的,但这个问题的一个步骤已经混淆了几个小时。
def McNuggets(n):
"""
n is an int
Returns True if some integer combination of 6, 9 and 20 equals n
Otherwise returns False.
"""
# Your Code Here
if n == 0:
return True
for i in (6, 9, 20):
if n >= i and McNuggets(n - i):
return True
return False
McNuggets(15)
___________________________________________________________________________
Frames Objects
Global frame
McNuggets [------------------> McNuggets(n)
McNuggets
n|15
i|6
McNuggets
n|9
i|9
我不知道在返回false并返回递归步骤之后i的值从6变为9。我试图张贴一张照片,但我无法拍摄。我想重新创建从代码到http://www.pythontutor.com/visualize.html#mode=edit
的23步提前感谢您的帮助
答案 0 :(得分:0)
在步骤23,原因i
为9
是因为McNuggets(15-9)仍在解决,McNuggets(9)
for循环正在完成执行。在条件i=6
解决后,McNuggets(9-6)
到那时为止,接下来是i=9
。结果McNuggets(9-9)
成为了下一个。