2013-12-11 2 views
0

두 숫자의 나머지를 반환하는 재귀 함수를 작성해야합니다. 우리가 remainder(5,3)을 테스트하는 경우 함수가 2를 반환합니다% b를 재귀 적으로 계산하는 방법은 무엇입니까?

def remainder(a,b): 
    if a==b: 
     return 0 
    else: 
     k=a-b 
     return a-b + remainder(b,a-k) 

그것은 맞습니다하지만 우리는 나머지 (15,3), 을 테스트하는 경우 우리는 12과 거짓을 얻을 것이다 : 여기에 내가 쓴거야. 나는 그것을 디버깅하는 방법을 모른다.

+0

'%'하지만 '%'가없는 것과 같은 일을하고 싶습니까? – keltar

답변

2

당신이 경우 누락 : (때 < B)

def remainder(a,b): 
    if a<b: #trivial: remainder = a - b*0 = a 
     return a 
    else: #reduce the problem to a simple one 
     return remainder(a-b, b) 

테스트 :

print remainder(15,3) 

출력 :

여기에 0

당신은 게으른과 2 개 이상의 라인을 작성하지 않으려면 :

def remainder(a,b): 
    return a if a < b else remainder(a-b, b) 
1

그 결과는 아래와 같습니다 :

def remainder(a,b): 
if a<b: 
    return a 
else: 
    return remainder(a-b,b) 
1

당신은 할 수 있습니다 :

def remainder(a, b): 
    if a < b: 
     return a 
    return remainder(a - b, b) 

예 : a < b 만약

>>> remainder(15, 3) 
0 
>>> remainder(14, 3) 
2 
>>> remainder(13, 3) 
1 

을 그러면 우리는 완료되었음을 의미합니다. 계산 결과를 알고 있으므로 a을 반환 할 수 있습니다. 그렇지 않으면 ba에서 뺀 다음 remainder을 다시 반복적으로 호출해야합니다. 그런 다음 ab보다 작을 때까지 반복적으로 계속할 수 있습니다. 그런 일이 발생하면 재귀가 중지됩니다 (즉, remainder에 다시 전화하지 않음). 결과를 반환 할 수 있습니다.

관련 문제