【发布时间】:2021-02-01 05:14:20
【问题描述】:
谁能帮我逐步理解这个功能,我已经尝试了几个小时没有运气。谢谢。
def mult(a,b):
# Take care of the base case!!
if b == 1:
return a
return mult(a,b-1) + a
【问题讨论】:
标签: python function recursion multiplication addition
谁能帮我逐步理解这个功能,我已经尝试了几个小时没有运气。谢谢。
def mult(a,b):
# Take care of the base case!!
if b == 1:
return a
return mult(a,b-1) + a
【问题讨论】:
标签: python function recursion multiplication addition
这是一个递归函数,它执行重复加法(这就是乘法)。添加打印语句:
>>> def mult(a, b):
... print(a, b)
... if b == 1:
... return a
... return mult(a, b - 1) + a
...
>>> mult(3, 5)
3 5
3 4
3 3
3 2
3 1
15
基本情况是b == 1,请注意您的递归调用将b 的值减1,并将输出添加到a。由于a 永远不会改变,所以您所做的就是将a 与自身相加b 次(同样,这与乘法相同)。
这是一个非常平庸的图表。一开始很难看,但最终你会明白的。
mult(2, 3) -> mult(2, 2) + 2 ------> 6
\ \
\ 4
\ / \
mult(2, 1) + 2
\ \
\ \
base case -> 2
【讨论】:
return mult(a, b - 1) + a 中,必须先评估对mult(a, b - 1) 的调用,然后再评估+ a。试着在纸上写下通过电话mult(2, 3) 的样子。
mult(2, 2) 返回 mult(2, 1) + 2 的结果,因为 b 在这种情况下为 1,所以将返回 2 + 2。这被添加到第一个+ 2。
您正在使用递归将 a 乘以 b。递归是一个相当高级的概念,因此您可能想了解一下它。递归的主要思想是函数反复调用自身来解决问题。为了避免无限循环,总是有一个基本情况。
在您的情况下,b 从其原始值开始,每次函数调用自身时减 1。每次,都会将 a 添加到自身。当 b 最终达到 1 时,递归停止并返回一个值。到那时,a 将被添加到自身 b 次;即a乘以b。
【讨论】: