2014-10-30 89 views
1

我有一個很奇怪的問題。我寫了一個方法,當給定所述集合時,確定描述一組數字的公式的程度。該方法是相當簡單的,我在幾行增加了調試的目的:Python方法返回無

def getdeg(numlist, cnt): #get the degree of the equation describing numlist 
    count = cnt #initial run should be with cnt as 0 
    templist = [] 
    for i in range(len(numlist) - 1): #exclude the last item (which doesn't have an item after it) 
     templist.append(numlist[i+1] - numlist[i]) #append the val of index i+1 minus index i 
    count += 1 
    print(templist) 
    if not allEqual(templist): 
     print("Not all equal, iterating again") 
     getdeg(templist, count) 
    else: 
     print(count) 
     return count 

def allEqual(numlist): 
    if len(numlist) == 1: 
     return True 
    for i in range(len(numlist) -1): 
     if not (numlist[i] == numlist[i+1]): 
      return False 

    return True 

現在,我在一組我知道在一個由3次方程式來描述數字運行此,像這樣:

x = getdeg([2, 8, 9, 11, 20], 0) 
print(x) 

相當簡單,是嗎?除了當你運行它,它打印出以下幾點:

[6, 1, 2, 9] 
Not all equal, iterating again 
[-5, 1, 7] 
Not all equal, iterating again 
[6, 6] 
3 
None 

一切都看起來不錯,直到,直到「無」。那裏在做什麼?我會假設else條件沒有被執行,但它打印出3很好,所以它顯然是。這也意味着該計劃「知道」count的價值是什麼,但它並沒有回報正確。有人能夠啓發我,瞭解到底發生了什麼嗎?

回答

3
​​

請記住,當一個方法遞歸調用本身,你還需要明確return退換,如果你想有一個值的值。

if not allEqual(templist): 
    print("Not all equal, iterating again") 
    return getdeg(templist, count) 
+0

啊,天啊。遞歸****我再一次。謝謝! – Max 2014-10-30 14:03:00

1

您還需要在if子句中返回一個值。

return getdeg(templist, count)