【问题标题】:Recursive addition/subtraction in python with negative integerspython中带有负整数的递归加法/减法
【发布时间】:2014-10-06 19:25:17
【问题描述】:

我正在尝试制作一个使用递归添加和减去两个参数的程序。到目前为止,我的程序适用于正整数,但我完全不知道如何使它适用于负整数。我将衷心感谢您的帮助。

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

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

【问题讨论】:

    标签: python recursion negative-number


    【解决方案1】:

    我会选择这个

    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
    

    【讨论】:

      【解决方案2】:

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

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

      在任何情况下,对 x 做“正确的事”:

      加法

      1. 如果 x 或 y 为 0,则返回另一个值
      2. 如果 y 为正数,则 x 加 1,y 减 1:6 + 2 = 7 + 1 = 8 + 0 = 8
      3. 如果 y 为负数,则从 x 中减去 1,将 1 加到 y 中:6 + (-2) = 5 + (-1) = 4 + 0 = 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 为负数,x 加 1,y 加 1: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))
      

      【讨论】:

        猜你喜欢
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多