2013-11-21 76 views
1
def sumdigits(number): 
    if number==0: 
    return 0 
    if number!=0: 
    return (number%10) + (number//10) 

這是我的函數。然而,它只能給出2位數字的適當總和。我怎樣才能得到任何數字的總和。 也將我的函數算作遞歸遞歸函數用python找到整數中的數字總和

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

回答

0

你不把遞歸步驟(調用sumdigits()內)!

3

不,它不是遞歸的,因爲你不是從函數內部調用你的函數。

嘗試:

def sumdigits(number): 
    if number == 0: 
    return 0 
    else: 
    return (number%10) + sumdigits(number//10) 
1

對於函數是遞歸的,它自身也必須調用本身。此外,由於您目前的人不這樣做,它不是遞歸的。

下面是一個簡單的遞歸函數,你想要做什麼:

>>> def sumdigits(n): 
...  return n and n%10 + sumdigits(n//10) 
... 
>>> sumdigits(457) 
16 
>>> sumdigits(45) 
9 
>>> sumdigits(1234) 
10 
>>> 
2

遞歸是編程或編碼的問題,其中一個函數調用自身在它的身上一次或多次的方式。

通常,它返回此函數調用的返回值。如果函數定義滿足遞歸條件,我們稱這個函數爲遞歸函數。

遞歸函數必須終止才能在程序中使用。 通常,它會終止,如果每次遞歸調用,問題的解決方案都會縮小並向基本情況移動。 基本情況是一種情況,可以在沒有進一步遞歸的情況下解決問題。 (如果調用中沒有滿足基本情況,則遞歸可能導致無限循環)。 對於這個問題,「基本情況」是:

if number == 0: 
    return 0 

的總和號碼的所有數字的簡單的遞歸函數爲:

def sum_digits(number): 
    """ Return the sum of digits of a number. 
     number: non-negative integer 
    """ 

    # Base Case 
    if number == 0: 
     return 0 
    else: 
     # Mod (%) by 10 gives you the rightmost digit (227 % 10 == 7), 
     # while doing integer division by 10 removes the rightmost 
     # digit (227 // 10 is 22) 

     return (number % 10) + sumdigits(number // 10) 

如果我們運行的代碼,我們有:

>>>print sum_digits(57) # (5 + 7) = 12 
12 
>>>print sum_digits(5728) # (5 + 7 + 2 + 8) = 22 
22 
+0

return(number%10)+ sum_digits(number // 10)#Typo – Kris1511

0

我相信這是你在找什麼:

def sum_digits(n): 
    if n < 10: 
     return n 
    else: 
     all_but_last, last = n // 10, n % 10 
     return sum_digits(all_but_last) + last 
0

雖然遞歸是一個聰明的方法,但出於性能和邏輯的原因,我通常會遠離它(它可能會非常複雜)。我知道這不是你正在尋找的答案,但我個人堅持這樣或某種循環:

def sumdigits(number): 
    return sum(map(int, str(number))) 

祝你好運!