2014-10-06 2 views
0

재귀를 사용하여 두 개의 인수를 더하고 빼는 프로그램을 만들려고합니다. 지금까지 내 프로그램은 양의 정수를 위해 작업하고 있지만 음의 정수에 대해이 작업을 어떻게 수행 할 수 있는지 완전히 알지 못합니다. 나는 정말로 당신의 도움에 감사 할 것입니다.파이썬에서 음의 정수를 가진 재귀 적 더하기/빼기

def add(x,y): 
    """add takes x and y and adds them together""" 
    if y == 0: 
     return x 
    else: 
     return add1(add(x, sub1(y))) 

def sub(x,y): 
    """sub takes x and y and subtracts them""" 
    if y == 0: 
     return x 
    else: 
     return sub1(sub(x, sub1(y))) 
def add1(x): 
    return x+1 

def sub1(x): 
    return x-1 

답변

2

내가 같은 생각 일 것이다이

def add(x,y): 
    if y > 0: 
     return add(x, y-1) + 1 
    elif y < 0: 
     return add(x, y+1) - 1 
    else: 
     return x 

빼기로 이동하지만 징후를

def sub(x,y): 
    if y > 0: 
     return sub(x, y-1) - 1 
    elif y < 0: 
     return sub(x, y+1) + 1 
    else: 
     return x 

테스트를 플립 것 : 여기

지금까지 내 코드입니다

>>> add(3,5) 
8 
>>> add(3,0) 
3 
>>> add(3,-5) 
-2  
>>> subtract(8,3) 
5 
>>> subtract(3,8) 
-5 
>>> subtract(3,0) 
3 
0

각각의 경우에 y == 0이 재귀의 기본 경우이기 때문에 y를 0에 가깝게하려고합니다. y는 긍정적 인 경우

  • , 당신은 X, 반복적으로, 모든 경우에 1

을 추가하려면 "옳은 일을"할 반복적으로

  • Y가 음수이면 1을 빼서 그렇게 : X 또는 Y가 0 인 경우는

    첨가

    1. 다른 값을 리턴
    2. y가 양수이면 x에 1을 더하고 y에서 6을 빼면 6 + 2 = 7 + 1 = 8 + 0 = 8
    3. y가 음수이면 x에서 1을 뺀 다음 y에 6을 더합니다. + (-2) = 5 + (-1) = 4 + 0 = 4

    번호 : Y가 0 인 경우

    def add(x, y): 
        if y == 0: 
         return x 
        elif x == 0: 
         return y 
        elif y > 0: 
         return add(add1(x), sub1(y)) 
        else: 
         return add(sub1(x), add1(y)) 
    

    빼기

    1. 반환 X
    2. y가 양수이면 x에서 1을 뺀 다음 y에서 1을 뺍니다. y - 6 = 2 - 5 - 1 = 4 - 0 = 4
    3. y가 음수이면 1을 x에 추가하고 1을 y : 6에 추가합니다. - (-2) = (7) - (-1) = (8) - 0 = 8

    번호 :

    def sub(x, y): 
        if y == 0: 
         return x 
        elif y > 0: 
         return sub(sub1(x), sub1(y)) 
        else: 
         return sub(add1(x), add1(y))