2016-08-02 131 views
0

我已阅读其他问题和答案,但无法实现我的代码的任何解决方案。对于这段代码给出运行时错误的原因,我仍然无能为力。为什么这个Python代码给运行时错误(NZEC)?

我试图在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 stands for Non Zero Exit Code. For C users, this will be generated if your main method does not have a return 0; statement. Other languages like Java/C++ could generate this error if they throw an exception.

的问题,我试图解决:

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

+0

如果我不得不猜测,int()转换失败,因为输入不是一个有效的整数。如果可以,请在做任何事之前尝试打印它 - 你确定你不应该分裂它或什么?我的猜测是你正在经历一个(heh)堆栈溢出 – James

+0

程序运行什么输入?程序不能运行什么输入? – Harrison

+0

崩溃时的输入是什么? –

回答

3

问题描述中提到了输入约束为< 10^4。那是10,000!您的代码需要对GetSquares进行10,000/4 = 2500次递归调用,这非常重要!事实上,它是如此的多,这是怎么回事给你,恰当,这个错误:

RuntimeError: maximum recursion depth exceeded 

你将不得不想出更好的办法来解决,不涉及这么多的递归问题!因为你在做这个编码挑战,所以我不会在这个答案中给出一个解决方案,因为那样会挫败目的,但是如果你想要一些刺激的答案,请随时询问。

0

该问题对'B'的值进行了约束,最大值为10000,这意味着有很多递归调用并给出运行时错误。尝试使用迭代解决。

相关问题