只求两个数的加法和减法?

2024-05-20 03:43:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

^{pr2}$

Tags: andintegersyouinputreturnifgivenint
3条回答

由于您的代码在其他情况下可以正常工作,我觉得错误可能是由于最大递归深度。你可以做下面这样的事情,不用递归。下面的代码使用循环和加法、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))

输出:

^{pr2}$

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

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

在sys.setrecursionlimit(1500)

这可能会有帮助。在

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

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

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

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

 sys.setrecursionlimit(1500)

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

注意:虽然它对您的代码有效,但它不是一个好的解决方案。你需要改进你的代码。在

希望这对你有帮助。在

相关问题 更多 >