为什么这个Python代码会给出运行时错误(NZEC)?

时间:2016-08-02 12:55:00

标签: python python-3.x

我已经阅读了其他问题和答案,但无法实现我的代码的任何解决方案。我仍然对此代码产生运行时错误的原因一无所知。

我正在尝试在CodeChef上提交代码,但它提供了运行时错误(NZEC),尽管代码在我的控制台上运行完美无缺。这是我的代码:

def GetSquares(base):
    if not base or base < 4:
        return 0
    else:
        x = (base - 4) - (base % 2) + 1
        return x + GetSquares(base - 4)

num_test = int(input())

for test in range(num_test):
    base = int(input())
    print (int(GetSquares(base)))

Codechef对NZEC的解释:

  

NZEC代表非零退出代码。对于C用户,这将是   如果您的main方法没有返回0,则生成;声明。   Java / C ++等其他语言如果抛出就会产生这个错误   例外。

我正在努力解决的问题:

https://www.codechef.com/problems/TRISQ

2 个答案:

答案 0 :(得分:3)

问题描述表明输入被限制为&lt; 10 ^ 4。那是10,000!你的代码需要对GetSquares进行10,000 / 4 = 2500次递归调用,这很多!事实上,它是如此之多,它恰好会给你这个错误:

RuntimeError: maximum recursion depth exceeded

你将不得不考虑一种更好的方法来解决不涉及这么多递归的问题!因为你正在做这个编码挑战,我不会在这个答案中给出一个解决方案,因为这会破坏目的,但是如果你想要一些针对答案的刺激,请随意提问。

答案 1 :(得分:0)

这个问题限制了' B '的值,最大值为10000,这意味着存在大量递归调用并产生运行时错误。尝试使用迭代求解。