Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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_Function_Recursion_Multiplication_Addition - Fatal编程技术网

python中的加法和乘法不理解代码

python中的加法和乘法不理解代码,python,function,recursion,multiplication,addition,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 这是一个递归函数,它执行重复加法,这就是乘法。添加打印语句: >>> def mult(a, b): ... print(a, b) ... if b == 1:

有人能帮我一步一步地理解这个函数吗?我已经试了好几个小时了,运气不好。多谢各位

def mult(a,b):
    # Take care of the base case!!
    if b == 1:
        return a

    return mult(a,b-1) + a

这是一个递归函数,它执行重复加法,这就是乘法。添加打印语句:

>>> 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

这是一个递归函数,它执行重复加法,这就是乘法。添加打印语句:

>>> 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

您正在使用递归将a乘以b。递归是一个相当高级的概念,因此您可能想了解它。递归的主要思想是函数反复调用自身来解决问题。为了避免无限循环,总是有一个基本情况


在您的情况下,b从它的原始值开始,并且每次函数调用自己时递减1。每次,都会向自身添加一个。当b最终达到1时,递归停止并返回一个值。到那时,a将被添加到b自身中;i、 e.a乘以b.

您正在使用递归将a乘以b。递归是一个相当高级的概念,因此您可能想了解它。递归的主要思想是函数反复调用自身来解决问题。为了避免无限循环,总是有一个基本情况


在您的情况下,b从它的原始值开始,并且每次函数调用自己时递减1。每次,都会向自身添加一个。当b最终达到1时,递归停止并返回一个值。到那时,a将被添加到b自身中;i、 e.a乘以b.

我仍然很困惑这是如何工作的,我们在最后加上什么来得到结果15?我已经试了4个小时来理解它。为什么我们将基本案例返回设置为a而不是0或1?为什么我们不在每个递归调用中添加3??@LenaAl。在递归调用返回multa,b-1+a中,必须首先计算对multa,b-1的调用,然后再计算+a。试着在纸上写下一个调用mult2,3的样子。mult2,3=>mult2,2+2=>mult2,1=>return2。递归调用如何知道添加这些数字,没有加法符号?@LenaAl。请参阅我的编辑。我试着画一张图表。mult2,2返回mult2,1+2的结果,在这种情况下,由于b是1,因此将返回2+2。这是加在第一个+2上的。我仍然很困惑这是如何工作的,我们在最后加上什么来得到结果15?我已经试了4个小时来理解它。为什么我们将基本案例返回设置为a而不是0或1?为什么我们不在每个递归调用中添加3??@LenaAl。在递归调用返回multa,b-1+a中,必须首先计算对multa,b-1的调用,然后再计算+a。试着在纸上写下一个调用mult2,3的样子。mult2,3=>mult2,2+2=>mult2,1=>return2。递归调用如何知道添加这些数字,没有加法符号?@LenaAl。请参阅我的编辑。我试着画一张图表。mult2,2返回mult2,1+2的结果,在这种情况下,由于b是1,因此将返回2+2。这是添加到第一个+2。非常感谢您的解释;我第一次尝试学习递归已经三天了。它在我头上。这是我大学第一学期的第一节编程课:没问题。确保你接受最适合你的答案。以下是这样做的程序和礼仪:非常感谢您的解释;我第一次尝试学习递归已经三天了。它在我头上。这是我大学第一学期的第一节编程课:没问题。确保你接受最适合你的答案。以下是这样做的程序和礼仪: