2016-08-02 157 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,這意味着有很多遞歸調用並給出運行時錯誤。嘗試使用迭代解決。