首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只用加法和减法求两个数的乘积?

只用加法和减法求两个数的乘积?
EN

Stack Overflow用户
提问于 2019-06-20 17:49:32
回答 5查看 1.2K关注 0票数 3

这是我的问题陈述。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.

这就是我的方法。

代码语言:javascript
复制
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))

其中一个测试用例显示运行时错误。有人能告诉我我的代码有什么问题吗?我也注意到了负面的价值观。

代码语言:javascript
复制
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)
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-06-20 18:44:55

我测试了几个输入的脚本,发现它不适用于更高的数字。例如,它不适用于m,n (3412 * 3412)。这是因为python中的递归深度在您的代码中被跨越了。

要增加python中的递归深度,请执行以下步骤:

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

2)在脚本开头键入以下内容:

代码语言:javascript
复制
 sys.setrecursionlimit(1500)

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

注意:虽然它适用于您的代码直到某个数字,但它不是一个好的解决方案。你需要改进你的代码。

希望这能对你有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2019-06-20 18:14:23

由于你的代码在其他情况下工作得很好,我觉得错误可能是因为最大递归深度。你可以像下面这样做,不需要使用递归。下面的代码使用循环和加法、forsum

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
3
-12
-36
票数 2
EN

Stack Overflow用户

发布于 2019-06-20 18:27:49

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

python递归限制仅为1000您可以使用'sys‘模块更改它

sys.setrecursionlimit(1500)

这可能会有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56683293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档