2016-11-29 4 views
1
def digit_sum(n): 
    '''(int)->number 
    Returns the sum of all the digits in the given integer, n''' 
    if n<10: 
     return n 
    return n%10 + digit_sum(n//10) 

def digital_root(n): 
    '''(int)->number 
    Returns the resulting sum of the digits in the given integer until it reaches a single digit number; via digit_sum''' 
    while n>9:  
     n=sum(digit_sum(n)) 
    return n 

den Code für digit_sum Schrieb und dann verwendet Rekursion digital_root zu schreiben. Wie würde ich darüber gehen? Jede Hilfe wird geschätzt!Digitale Wurzel ohne Schleifen Python

+0

Ich frage mich wirklich, warum Professoren Schleifen hassen? – Maroun

+0

Wahrscheinlich eine Rekursionsübung? –

Antwort

1

So ist die Idee i s, dass Sie die Rekursion auch für die letzte verwenden müssen? In diesem Fall sollte dies die Aufgabe erledigen:

def digital_root(n): 
    if n < 10: 
     return n 
    return digital_root(digit_sum(n)) 
8

Wikipedia Listen eine einfache O (1) Die Formel für die digitale root:

def digit_root(n): 
    return (n - 1) % 9 + 1 

Dies findet nicht berücksichtigt einen Eingang weniger als 1, so dass man wie folgt ändern kann, unter der Annahme, dass der Eingang Zahl ist eine ganze:

def digit_root(n): 
    return (n - 1) % 9 + 1 if n else 0 

Beispiele:

>>> digit_root(1) 
1 
>>> digit_root(11) 
2 
>>> digit_root(235) 
1