2014-09-24 105 views
0

我已經寫在Python 2.7功能caluclates給定數量的數字和:Python 2.7中迭代函數的遞歸函數如何實現?

def dig_sum(n): 
    s = 0 
    while n: 
     s = s + n % 10 
     n = n/10 
    return s 

現在試圖改寫它作爲一個遞歸函數:

def dig_sum(n): 
    s = 0 
    if n != 0: 
     s = n % 10 
     s += s 
     return dig_sum(n/10) 
    return s 

什麼是錯的我遞歸函數?做這些功能時最好的做法是什麼? 在此先感謝!

+0

在就地除了S上不會傳播到外部功能 - 你總是會返回0 – mdurant 2014-09-24 19:35:26

+0

你已經爲你的問題得到了一些很好的答案!但是在將來,當你開始提出更復雜的問題時,如果你描述問題更好,你會得到更好的結果。你只是問「我的功能有什麼問題?」而不是描述你得到的任何錯誤,異常或不好的結果。嘗試始終在您的問題中包含這些細節。 – skrrgwasme 2014-09-24 19:38:54

+0

請注意,如果您在1000位以上的數字上運行此操作,它會崩潰。 Python中的遞歸通常是要避免的,除非你的代碼在沒有它的情況下顯得更加複雜(否則它只是針對CS wonks)。 – 2014-09-24 20:04:22

回答

5

遞歸函數應該是這樣的

def dig_sum(n): 
    if n < 10:      # Handle single digits as your base case 
     return n 
    else: 
     return n%10 + dig_sum(n/10) # Add one's digit, then shift and continue 

測試

>>> dig_sum(1001) 
2 

>>> dig_sum(12345) 
15 
2
def dig_sum(n): 
    if n != 0: 
     s = n % 10 
     return s + dig_sum(n/10) 
    else: 
     return 0 

print dig_sum(45) 

輸出

9