你能解释一下这段代码是如何操作的吗?

时间:2017-07-27 18:19:33

标签: recursion

def aa(a):
    if a == 1:
        return 1
    else:
        return aa(a-1) + 1

我能够理解上面的递归以及它是如何工作的。

但是我无法理解这种递归是如何起作用的。你能帮助我吗?

def aa(a):
    if a == 1:
        return 1
    else:
        return aa(a-1) + aa(a-1)

我也尝试过调试。光标是跳跃的地方。没有帮我弄清楚。

1 个答案:

答案 0 :(得分:0)

在一个简单的层面上考虑这个问题,比如像2:

这样的数字
def aa(a):
    if a == 1:
        return 1
    else:
        return aa(a-1) + aa(a-1)

由于2大于1,我们直接去其他地方。

其他人要求我们评估aa(a-1),然后将aa(a-1)添加到其中。为此,我们必须首先评估此表达式的最左侧值;

如果起始值为2,则很容易看到aa(a-1)aa(2-1)或仅aa(1),由于第一个if语句,它将始终返回值1。因此,else会评估为aa(1) + aa(1)或仅1 + 1

那么当我们传递初始值3时会发生什么?逻辑如下(粗体是将在下一行评估的函数):

  • 3 == 1?无
  • aa(3-1) + aa(3-1)// aa(2) + aa(2)
    • 2 == 1?无
    • aa(2-1) + aa(2-1)
      • 1 == 1? YEP,返回1
    • 1 + aa(2-1)
      • 1 == 1? YEP,返回1
    • 1 + 1
  • 2 + aa(3-1)
    • 2 == 1?无
    • aa(2-1) + aa(2-1)
      • 1 == 1? YEP,返回1
    • 1 + aa(2-1)
      • 1 == 1? YEP,返回1
    • 1 + 1
  • 2 + 2

基本上你正在评估等式的左边,而在左边,你正在评估左边和右边。但是你首先评估左边,然后左边评估等等,直到你最终得到一个结果,然后评估右边,继续直到你得到答案:

    • 正确
  • 正确
  • 价值