2014-11-07 2 views
0

두 정수의 가장 큰 공약수를 계산하는 간단한 파이썬 코드를 작성하려고합니다.유클리드 알고리즘의 파이썬 코드의 이상한 버그

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

이 간단한 코드는 유클리드 알고리즘을 사용합니다. 문제는 b가 0이 될 때를 제외하고는 리턴되지 않는다는 것입니다. 이 버그의 출처는 무엇입니까?

+0

코드를 포맷 할 수 있습니까? – wanderlust

+0

* b가 0 인 경우를 제외하고는 반환되지 않습니다. * b == 0 블록에 return 문이 있고 나머지 함수가 충분히 알려주지 않는다는 사실 –

+0

각 재귀 함수 호출에 return statement? – quark

답변

0

당신은 함수 호출을 반환해야합니다 :

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

것은 물론 재귀 호출에서 반환을 추가합니다.

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

코드에서 재귀 호출의 반환 값을 반환하지 않습니다.

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

이렇게하면됩니다.