Python—为什么递归调用会在没有返回值的情况下增加变量?
为什么这样做有效 这是一个用加法乘以正数的递归函数Python—为什么递归调用会在没有返回值的情况下增加变量?,python,Python,为什么这样做有效 这是一个用加法乘以正数的递归函数 def multiplication(num1, num2): if num1 == 0 or num2 == 0: return 0 print(num1, " ", num2) if num1 == 1: return num2 total = num2 + multiplication(num1-1, num2) return total 我知道函数会调用自己num1-1次。我不明白的是,为什么每次函
def multiplication(num1, num2):
if num1 == 0 or num2 == 0:
return 0
print(num1, " ", num2)
if num1 == 1:
return num2
total = num2 + multiplication(num1-1, num2)
return total
我知道函数会调用自己num1-1次。我不明白的是,为什么每次函数返回时,变量total都会增加num2的值。上一次调用函数时,它返回num2(调用堆栈的第一个)是有意义的,但其他调用不返回任何内容,num2的值从未更改。似乎total应该设置为None,而不是+=num2
谢谢为
乘法(3,10)
运行的代码将如下所示
Num1 Num2 total Return
1st: 3 10
2nd: 2 10
3rd: 1 10 10(returned to the 2nd)
2nd: 2 10 20 20(returned to the 1st)
1st: 3 10 20 30(returned to the output)
从试运行中可以看出,
Num2
的值从未更改。但是其他调用不返回任何内容
您的意思是什么?他们返回total
。为什么你认为其他调用没有返回任何东西?有一个返回值total
。我想这是我不明白的。递归调用total=“some code”看起来像一个赋值。我想我的语法有问题。啊,我明白了。首先,你绝对正确,total=“some code”看起来像赋值,因为它是。然而,在右边,有一个函数正在被调用,并且必须在这个总数得到赋值之前进行求值。您可以将其视为对来自函数的答案的“评估”。每次求值都会将函数(该函数恰好与此代码中的函数相同)调用到较低级别的堆栈上,并等待求值完成。谢谢,我考虑的是调用在到达基本情况的过程中产生了什么,而不是在返回过程中发生了什么。如果您认为这对您有帮助,请接受答案。我该怎么做?我是新来的。