2017-09-05 11 views
-3

これは、ユークリッドアルゴリズムを使用して最大の共通分母を見つけるためのコードです。無視された場合、なぜ私の入れ子ですか?

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) 

編集:変更(ELIF bの< A)

+0

あなたの質問は何であるの最大公約数を計算することができますか? – ifconfig

+1

'a> b'は' b alfasin

+0

%bの残りが0の場合はaまたはbを返しません –

答えて

0

gcdIterは値を返すので、印刷する必要があります。

print gcdIter(12, 2) 

あなたにもこのよう

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

(< BをELIF)に私はあなたのelifこのされるべきだと思う:

elif a < b: 
a > bとして

b < aが本質的に同じです物...

0

あなたのelif部分には決して届きません。 a> bの場合、最初のif自体が満たされます。 elif条件をb> aに変更します。しかし、入力したgcd(12,2)に対してはうまくいくはずです。

+0

pythontutor.comでこのコードを実行しようとすると。あなたは戻り値bの代わりに何も返しません。 –

0

たぶん、あなたはこれを行うことができます。

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

    # rest of your code 

その場合、あなたはいつもBの小さい値を持っていますあなたの関数で確認することができます。

+1

しかし、それはGCDを返さない –

+0

各ループについて、GCDを得る余裕がなくなるまで、残りを常にbに分割する必要があるからです。私は次回に自分の質問にコメントを書くべきです。 –

関連する問題