这是我的问题陈述。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)发布于 2019-06-20 18:44:55
我测试了几个输入的脚本,发现它不适用于更高的数字。例如,它不适用于m,n (3412 * 3412)。这是因为python中的递归深度在您的代码中被跨越了。
要增加python中的递归深度,请执行以下步骤:
1)在脚本中导入sys模块,
2)在脚本开头键入以下内容:
sys.setrecursionlimit(1500)这会将默认限制(1000)增加到1500。
注意:虽然它适用于您的代码直到某个数字,但它不是一个好的解决方案。你需要改进你的代码。
希望这能对你有所帮助。
发布于 2019-06-20 18:14:23
由于你的代码在其他情况下工作得很好,我觉得错误可能是因为最大递归深度。你可以像下面这样做,不需要使用递归。下面的代码使用循环和加法、for和sum。
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发布于 2019-06-20 18:27:49
尝试一个大于1000的数字并检查
python递归限制仅为1000您可以使用'sys‘模块更改它
sys.setrecursionlimit(1500)
这可能会有帮助。
https://stackoverflow.com/questions/56683293
复制相似问题