Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—为什么递归调用会在没有返回值的情况下增加变量?_Python - Fatal编程技术网

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”看起来像赋值,因为它是。然而,在右边,有一个函数正在被调用,并且必须在这个总数得到赋值之前进行求值。您可以将其视为对来自函数的答案的“评估”。每次求值都会将函数(该函数恰好与此代码中的函数相同)调用到较低级别的堆栈上,并等待求值完成。谢谢,我考虑的是调用在到达基本情况的过程中产生了什么,而不是在返回过程中发生了什么。如果您认为这对您有帮助,请接受答案。我该怎么做?我是新来的。