我正在尝试理解这个程序,但无法理解它。任何人都可以建议我哪里出错了?
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脚本中,
我按照您的意见并将其放在一起,以便更容易理解
答案 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