找出def后面的逻辑McNuggets(n)使用递归解决了

时间:2014-10-03 03:14:06

标签: python recursion

我理解递归是如何工作的,但这个问题的一个步骤已经混淆了几个小时。

   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步

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

在步骤23,原因i9是因为McNuggets(15-9)仍在解决,McNuggets(9) for循环正在完成执行。在条件i=6解决后,McNuggets(9-6)到那时为止,接下来是i=9。结果McNuggets(9-9)成为了下一个。