3

我需要编写函数 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)

有人可以帮助我吗,因为我无法弄清楚!

4

5 回答 5

7

你试图调用n(m+1)你的elifandelse块,因为你说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
于 2015-09-19T13:04:38.900 回答
1

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

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]
于 2015-09-19T13:09:03.687 回答
1

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

def mult(a, b):
   if a == 0:
      return 0
   elif a == 1:
      return b
   else:
      return b + mult(a-1, b)
于 2015-09-19T13:11:52.417 回答
1

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)
于 2021-08-24T06:55:35.747 回答
0

代码:

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()
于 2020-05-25T23:45:48.330 回答