【问题标题】:Multiplication function with recursion in PythonPython中带有递归的乘法函数
【发布时间】:2015-09-19 12:51:50
【问题描述】:

我需要编写函数 mult(n, m) 来输出两个整数 n 和 m 的乘积。我仅限于使用加法/减法/否定运算符以及递归。

这是我目前所拥有的:

def mult( n, m ):
    if m == 0:
        return 0
    elif m < 0:
        return n - n(m+1)
    else:
        return n + n(m-1)

谁能帮帮我,因为我想不通!

【问题讨论】:

  • 你有什么问题?请举例说明输入输出。
  • 代码中没有递归。
  • 请注意,如果您注意到mult(n, m) == -mult(n, -m),则处理否定参数要简单得多。

标签: python function recursion multiplication negation


【解决方案1】:

你试图在你的elifelse块中调用n(m+1),因为你说n是一个整数,这就是问题所在,你应该调用mult()函数递归发送nm+1m-1 作为参数。

另一个问题是您应该在返回之前将n - mult(n, m+1) 的结果转换为负数。

例子-

...
    return - (n - mult(n, m+1))
else:
    return n + mult(n, m-1)

带有示例更改的演示 -

>>> mult(5,-3)
-15
>>> mult(-10,-3)
30
>>> mult(5,3)
15

【讨论】:

  • 非常感谢!我了解问题所在,该功能现在运行良好!
【解决方案2】:

递归意味着,你必须调用函数本身

def mul(a, b):
    def _mul(a, b, c=1):
        if a<c:
            return a, 0
        a, r = _mul(a, b + b, c + c)
        return (a - c, r + b) if a >= c else (a,r)
    return (_mul(a, b) if a<b else _mul(b, a))[1]

【讨论】:

  • 此代码不适用于负数。只返回 0!
【解决方案3】:

使用递归在python中编写的最简单方法:

def mult(a, b):
   if a == 0:
      return 0
   elif a == 1:
      return b
   else:
      return b + mult(a-1, b)

【讨论】:

  • 此解决方案不适用于两个负数。
【解决方案4】:

Python 中的递归乘法:

def multiplication(num_a, num_b):
   if num_a == 0 or num_b == 0:
     return 0
   return num_a + multiplication(num_a, num_b - 1)

【讨论】:

    【解决方案5】:

    代码:

    def mult(a, b):
        if a == 0 or b == 0:
            return 0
        else:
            if a < 0 and b > 0:
                return a + mult(a, b - 1)
            elif a < 0 and b < 0:
                return -b + mult(-a - 1, -b)
            else:
                return b + mult(a - 1, b)
    

    测试:

    def test():
        x1 = mult(5, 3)
        x2 = mult(6, -3)
        x3 = mult(-3, 3)
        x4 = mult(-3, -33)
    
        print('5 * 3 = ', x1)
        print('6 * -3 = ', x2)
        print('-3 * 3 = ', x3)
        print('3 * -33 = ', x4)
    
    test()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-16
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      相关资源
      最近更新 更多