Python基本程序理解

时间:2014-06-09 11:51:33

标签: python recursion

我正在尝试理解这个程序,但无法理解它。任何人都可以建议我哪里出错了?

def mult(a, b):
    if b == 0:
        return 0
    rest = mult(a, b - 1)
    value = a + rest
    return value

print("3 * 2 = ", mult(3, 2))

在上面的Python脚本中,

  • 行打印(" 3 * 2 =",mult(3,2))
  • Mult函数被称为
  • 在Mult函数中b == 2所以if条件返回FALSE
  • Line rest = Mult(a,b -1)是next,再次调用Mult函数的新值(3,1)
  • 在Mult函数中b == 1所以if条件返回FALSE
  • Line rest = Mult(a,b -1)接下来,再次调用Mult函数新值(3,0)
  • 在Mult函数中b == 0所以if条件返回TRUE
  • if condtion
  • 返回值0
  • 程序Prints" 3 * 2 = 0"?

我按照您的意见并将其放在一起,以便更容易理解 How to read

3 个答案:

答案 0 :(得分:3)

您理解的问题在于对mult(3, 0)的调用将返回的位置。该调用不会返回到行print...,而是返回到行rest = mult(a, b-1)。因此,value = a + rest会导致value的值为3 + 0 = 3.然后return value行将再次返回rest = mult(a, b-1)。当它再次点击return value时,就会返回打印语句。

答案 1 :(得分:1)

您必须在逐步列表中构建一个调用堆栈:当b == 0函数mult返回上次调用的位置时,那就是行{ {1}}而不是rest = ...行。

答案 2 :(得分:1)

您正在递归使用mult,并返回rest,因此每次从函数返回时都会更新该值。一些印刷声明可能有助于澄清正在发生的事情。

def mult(a, b):
    if b == 0:
        print "b = 0"
        return 0
    rest = mult(a, b - 1)
    value = a + rest
    print "rest", rest, "value", value
    return value

mult(3,2)

输出

b = 0
rest 0 value 3
rest 3 value 6
6