带有负整数的python中的递归加法/减法

时间:2014-10-06 19:25:18

标签: python recursion negative-number

我正在尝试使用递归来创建一个添加和减去两个参数的程序。到目前为止,我的程序正在为正整数工作,但我完全迷失了如何使这个工作为负整数。我将衷心感谢您的帮助。

到目前为止,这是我的代码:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在每种情况下,您都会尝试使y更接近0,因为y == 0是递归的基本情况。

  • 如果y为正数,则通过反复减1来实现。
  • 如果y为负数,则重复添加1。

在每种情况下,做正确的事情&#34;到x:

<强>加成

  1. 如果x或y为0,则返回其他值
  2. 如果y为正,则将x加1,从y减去1:6 + 2 = 7 + 1 = 8 + 0 = 8
  3. 如果y为负数,则从x减去1,将y加1:6 +( - 2)= 5 +( - 1)= 4 + 0 = 4
  4. 代码:

    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. 如果y为0,则返回x
    2. 如果y为正,则从x减去1,从y减去1:6 - 2 = 5 - 1 = 4 - 0 = 4
    3. 如果y为负数,则将1加1,将1加1:6 - ( - 2)= 7 - ( - 1)= 8 - 0 = 8
    4. 代码:

      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))