2012-11-07 45 views
3

我需要幫助實現一個函數,它將採用整數的數字並將它們相加。只要sumDigits函數實現遞歸,它是有效的,並且主函數必須保持原樣。我將包括以下模板:Python3遞歸總和數字整數

def sumdigits(value): 
    #recursively sum digits 

def main(): 
    number=int(input(「Enter a number : 」)) 
    print(sumdigits(number)) 

main() 

謝謝

回答

6

極短的版本:

def sumdigits(value): 
    return value and (value % 10 + sumdigits(value // 10)) 

value and部分使其返回零,而不是無限遞歸一旦得到過去的最後一位。

value % 10部分獲取最後一位數(「one」位置)。

sumdigits(value // 10)得到所有的數字的總和,除了最後一位

//是整數除法,自動扔掉結果的小數部分爲您服務。

+1

[tail-recursive variant'return sumdigits(value // 10,total + value%10)if value!= 0 else total'](http://ideone.com/pjs1TG) – jfs

+0

@JFSebastian什麼是那(在Python中)的優點?另外,對於這種特殊情況,他可能不被允許改變功能簽名。 – agf

+0

謝謝,感謝解釋! – pythonhack