【问题标题】:python with addition and multiplication not understanding the code带有加法和乘法的python不理解代码
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 我仍然很困惑它是如何工作的,我们在最后添加了什么以获得结果 15?我已经尝试了 4 个小时来理解它。为什么我们将基本情况返回设置为 a 而不是 0 或 1?为什么我们不向每个递归调用添加 3??
    • @LenaAl。在递归调用return mult(a, b - 1) + a 中,必须先评估对mult(a, b - 1) 的调用,然后再评估+ a。试着在纸上写下通过电话mult(2, 3) 的样子。
    • mult(2,3) => mult(2, 2) + 2 => mult(2,1) => 返回 2。
    • 递归调用怎么知道要加那些号码,没有加号?
    • @LenaAl。看我的编辑。我试着画一张图。 mult(2, 2) 返回 mult(2, 1) + 2 的结果,因为 b 在这种情况下为 1,所以将返回 2 + 2。这被添加到第一个+ 2
    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢您的解释;我第一次尝试学习递归3天。它在我的头顶。这是我大学第一学期的第一堂编程课 :)
    • 没问题。确保您接受最适合您的答案。以下是这样做的程序和礼仪:stackoverflow.com/help/someone-answers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多