繁体   English   中英

为什么我的 python 代码中出现 Traceback 错误

[英]Why am I getting Traceback error in my python code

def min_op(n,base):
    if(base[n]!=None):
        result=base[n]
    elif(n==1):
        result=1
    else:
        if(n%2==0):
            result=1+min(min_op(n//2,base),min_op(n-1,base))
            base[n]=result
        else:
            result=1+min_op(n-1,base)
            base[n]=result
    return result

这是我得到运行时错误的错误:

Runtime ErrorTraceback (most recent call last):
  File "/home/d7106f7b35cdcbcb097332ba5e88b383.py", line 17, in <module>
    print(min_op(n,base))
  File "/home/d7106f7b35cdcbcb097332ba5e88b383.py", line 8, in min_op
    result=1+min(min_op(n//2,base),min_op(n-1,base))
  File "/home/d7106f7b35cdcbcb097332ba5e88b383.py", line 8, in min_op
    result=1+min(min_op(n//2,base),min_op(n-1,base))
  File "/home/d7106f7b35cdcbcb097332ba5e88b383.py", line 8, in min_op
    result=1+min(min_op(n//2,base),min_op(n-1,base))
  File "/home/d7106f7b35cdcbcb097332ba5e88b383.py", line 11, in min_op
    result=1+min_op(n-1,base)
  File "/home/d7106f7b35cdcbcb097332ba5e88b383.py", line 8, in min_op
    result=1+min(min_op(n//2,base),min_op(n-1,base))
  File "/home/d7106f7b35cdcbcb097332ba5e88b383.py", line 11, in min_op
    result=1+min_op(n-1,base)
  File "/home/d7106f7b35cdcbcb097332ba5e88b383.py", line 8, in min_op
    result=1+min(min_op(n//2,base),min_op(n-1,base))
  File "/home/d7106f7b35cdcbcb097332ba5e88b383.py.................

您的错误是堆栈溢出,称为 python 为:

RecursionError: maximum recursion depth exceeded in comparison

递归错误的原因是您有以下行:

result=1+min(min_op(n//2,base),min_op(n-1,base))

其中min_op(n-1,base)部分意味着程序总有一种方法可以向下递归n次,在Minimum Operations编码问题约束的情况下, N的值可能高达 10^ 4 超过了 python 堆栈深度。

这意味着您解决此问题的方式不适合递归解决方案,除了这部分是完全多余的,您的代码可以通过简单地替换以下行来修复:

result = 1 + min_op(n // 2, base)

通过此更改,您的程序应该运行得更快且没有错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM