2017-09-05 3 views
-3

Dies ist mein Code, um den größten gemeinsamen Nenner mit dem Euklidischen Algorithmus zu finden.Warum wird mein verschachtelt wenn ignoriert?

def gcdIter(a, b): 

    if a > b: 
     if a%b == 0: 
      return b 
     r = a%b 
     a = b 
     return gcdIter(a, r) 
    elif a < b: 
     if b%a == 0: 
      return a 
     r = b%a 
     a = b 
     return gcdIter(a, r) 

gcdIter(12, 2) 

Edit: geändert (Elif b < a) bis (Elif eine < b)

+0

Was ist Ihre Frage? – ifconfig

+1

'a> b' ist das gleiche wie' b alfasin

+0

Wenn der Rest von% b gleich Null ist, gibt es kein a oder b zurück –

Antwort

0

Da gcdIter einen Wert zurückgibt, müssen Sie es drucken.

print gcdIter(12, 2) 

können Sie gcd wie folgt berechnen, wie gut

def gcd(a,b): 
    if b==0: 
     return a 
    return gcd(b,a%b) 
1

Ich denke, Ihre elif sollte dies sein:

elif a < b: 

Als a > b und b < a ist im Wesentlichen die gleiche Ding ...

0

Ihr elif Teil wird nie erreicht werden. Wenn a> b das erste if selbst erfüllt. Ändern Sie die Elif-Bedingung in b> a. Aber für Ihre Eingabe gcd (12,2) sollte es funktionieren.

+0

Wenn Sie versuchen, diesen Code auf pythontutor.com auszuführen. Sie werden sehen, dass es nichts zurückgeben wird, anstatt zurückzukehren. B. –

0

Vielleicht können Sie dies tun:

def gcdIter(a, b): 
    if (a < b): 
     return gcdIter(b, a) 

    # rest of your code 

In diesem Fall können Sie in Ihrer Funktion stellen Sie sicher immer weniger Wert für b haben werden.

+1

Aber das wird die GCD –

+0

nicht zurückgeben Da für jede Schleife der Rest immer in b geteilt werden sollte, bis es keinen Rest gibt, um die GCD zu erhalten. Ich sollte das nächste Mal meine Fragen kommentieren. –

Verwandte Themen