0
####
# GCD calculator using euclidean algorithm
####

def euclid_gcd(x,y) :
    new_gcd = y
    remainder = x % y
    print x,y, new_gcd, remainder
    if(remainder != 0) :
        euclid_gcd(y,remainder)   
    else :
        print x,y, new_gcd, remainder
        return new_gcd

print 'x | y | new_gcd | remainder'
print euclid_gcd(252,198)

ただし、このコードを実行すると、これが返されます...

x | y | new_gcd | remainder
252 198 198 54
198 54 54 36
54 36 36 18
36 18 18 0
36 18 18 0
None

この場合は18を返すはずですが、何も返されません。どこが間違っていたのでしょうか。すべてが論理的な手順に従っているようです。

4

2 に答える 2

4

あなたがする必要がありますreturn euclid_gcd(y,remainder)

ここで再帰結果を返すのを忘れました:

if(remainder != 0) :
    euclid_gcd(y,remainder)   
于 2012-10-30T03:43:14.220 に答える
1

あなたの問題を解決する別の方法

def euclid_gcd(x, y):
    new_gcd = y
    remainder = x % y
    print x, y, new_gcd, remainder
    if remainder != 0:
        new_gcd = euclid_gcd(y, remainder)   
    print x, y, new_gcd, remainder
    return new_gcd

私はこれを提案しnew_gcdましたy

取得していた理由は、関数が明示的に何も返さない場合、NonePython が暗黙的に返すためです。None

于 2012-10-30T03:53:25.150 に答える