仅使用加法和减法查找两个数字的乘积?

时间:2019-06-20 09:49:32

标签: python python-3.x recursion

这是我的问题陈述。 Given two integers m & n, calculate and return their multiplication using recursion. You can only use subtraction and addition for your calculation. No other operators are allowed.

这是我的方法。

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

m = int(input())
n = int(input())
print (mult(m, n))

其中一个测试用例显示“运行时错误”。 有人可以告诉我我的代码有什么问题。我也照顾过负值。

Runtime Error
Traceback (most recent call last): File Main.py , line 18, in <module> print (mult(m, n)) 
File Main.py , line 14, in mult return m + mult(m, n - 1) 
File Main.py , line 14, in mult return m + mult(m, n - 1) 
File Main.py , line 14, in mult return m + mult(m, n - 1) 
File Main.py , line 14, in mult return m + mult(m, n - 1) 
File Main.py , line 14, in mult return m + mult(m, n - 1) 
File Main.py , line 14, in mult return m + mult(m, n - 1)

4 个答案:

答案 0 :(得分:2)

由于您的代码在其他情况下也可以正常工作,因此我认为该错误可能是由于最大递归深度造成的。您可以执行以下操作,而无需使用递归。下面的代码使用循环和加法forsum

def mult(m, n):
    result = sum(m for _ in range(abs(n)))
    if n < 0:
        return -result
    else:
        return result


m = int(input())
n = int(input())
print(mult(m, n))

输出:

3
-12
-36

答案 1 :(得分:2)

我对您的脚本进行了几次输入测试,结果发现它不适用于较大的数字。例如,它不适用于m,n(3412 * 3412)。 这样做的原因是python中的递归深度默认为1000。

要在python中增加递归深度,请按照以下步骤操作:

1)在脚本中导入sys模块,然后

2)在脚本开头 键入:

 sys.setrecursionlimit(1500)

这会将默认限制(1000)增加到1500。

注意:尽管它可以为您的代码提供一定数量的支持,但这并不是一个好的解决方案。您需要改进您的代码。

希望这会对您有所帮助。

答案 2 :(得分:1)

尝试一个大于1000的数字并检查

python递归限制为1000,只有使用'sys'模块才能更改它

sys.setrecursionlimit(1500)

这可能有帮助。

答案 3 :(得分:0)

感谢大家帮助我找出错误。实际上,当我使用'tobias_k'将其更改为更高的值时,递归限制给我带来了问题

import sys
sys.setrecursionlimit(1000)

这解决了我的问题。