2014-12-31 12 views
0

我想寫一個程序,找到最小的pallindrome多維數據集。我的代碼:Python - 迴文數字

def cubepal(): 
    i=3 
    if str(i**3)==str(i**3)[::-1]: 
     return i**3 
    else: 
     i=i+1 
     cubepal() 

我很確定第一部分是正確的,但最後三行讓程序無限循環運行。最後它只是說這個問題在線

if str(i**3)==str(i**3)[::-1]: 

我不明白爲什麼會出現問題。有人可以幫忙嗎?

+0

在我看來,最小的迴文多維數據集是'0',因爲0^3 = 0而'0'是迴文。 –

+0

請正確縮進你的功能代碼 – xnx

+0

@CommuSoft:是的,這就是爲什麼我插入i = 3。我正在尋找一個3位數字。 –

回答

1

原因是你沒有正確地確定變量的範圍。

你叫cubepalcubepal初始化i=3現在,當您執行遞歸調用,i是一個局部變量等於3

def cubepal(i): 
    if str(i**3)==str(i**3)[::-1]: 
     return i**3 
    else: 
     return cubepal(i+1) 

並且用cubepal(3)來稱呼它。

雖然對於這樣的情況,最好不要使用遞歸:如果預計i會非常大(這裏不是這種情況),但是對於內存效率低下的Python中間件,可能會導致調用堆棧與結果的值成比例。

更好的處理方法是我猜while循環。

def cubepal(): 
    i = 3 
    while str(i**3) != str(i**3)[::-1]: 
     i = i+1 
    return i**3 

這通常也會更有效率,因爲調用函數會導致一些關於簿記和調用堆棧的開銷。

+0

我認爲你需要'return cubepal(i + 1)' – xnx

+0

@xnx:fixed,many謝謝。 –

1

你可能打算這樣做:

def cubepal(i): 
    if str(i**3)==str(i**3)[::-1]: 
     return i**3 
    else: 
     return cubepal(i+1) 

print(cubepal(3)) 

這將產生 「343」。

當然,在Python中沒有必要這樣做,因爲Python缺乏TCO。