【问题标题】:How to get the sum of a list of numbers with recursion?如何通过递归获得数字列表的总和?
【发布时间】:2021-11-08 03:20:12
【问题描述】:

我想用递归函数对数字求和,即

getSum([1, 2, 3, 4, 5]) 

应该返回 1+2+3+4+5 == 15

我不是递归函数方面的专家,我尝试过类似的方法:

def getSum(piece):
    for i in piece
        suc += getSum(i)

问题是我不能循环遍历整数。我敢肯定这是一个很容易的任务,但我真的想不通。

【问题讨论】:

    标签: python recursion


    【解决方案1】:

    你不需要循环。递归将为您做到这一点。

    def getSum(piece):
        if len(piece)==0:
            return 0
        else:
            return piece[0] + getSum(piece[1:]) 
    print getSum([1, 3, 4, 2, 5])
    

    【讨论】:

    • 如果我想在每次调用函数 getSum 后检查总和怎么办?所以我想检查 f.e.如果 sum>9:做点什么?
    【解决方案2】:

    我认为不明确检查长度会更好一些:

    def getSum(piece):
        return piece[0] + getSum(piece[1:]) if piece else 0
    

    演示:

    >>> getSum([1, 2, 3, 4, 5])
    15
    

    【讨论】:

      【解决方案3】:

      出于学术目的(学习 Python),您可以使用递归:

      def getSum(iterable):
          if not iterable:
              return 0  # End of recursion
          else:
              return iterable[0] + getSum(iterable[1:])  # Recursion step
      

      但您不应该在实际生产代码中使用递归。与使用内置插件相比,它效率不高,代码也不那么清晰。对于这种情况,您既不需要递归也不需要循环。只需使用内置的sum

      >>>a = [1, 2, 3, 4, 5]
      >>>sum(a) 
      15
      

      【讨论】:

      • 但我必须用递归来做:P
      • 不要在生产代码中使用递归。出于学术目的,它可以是可以的,但不要在现实生活中添加它。
      • 使用,谢谢,已修复。
      【解决方案4】:

      你也可以使用reduce。 函数 reduce(func, seq) 不断地将函数 func() 应用于序列 seq。它返回一个值。

      reduce(lambda x,y: x+y, range(1,6))
      

      【讨论】:

        【解决方案5】:

        或者,以更“Pythonic”的方式:

        suml = lambda l: l[0] + suml(l[1:]) if l else 0
        
        print(suml(range(101)))
        

        输出:5050

        【讨论】:

          【解决方案6】:

          使用递归和弹出函数

          def getSum(piece):
              return piece.pop() + getSum(piece) if piece else 0
          

          【讨论】:

            【解决方案7】:

            如果您的列表比简单列表更复杂,例如:

            mylist = [1,-10,[[2,[3]],7.3],[[[[[[[[[-5]]]],2]]],1],4]]
            

            你应该使用这个代码:

            mylist = [1,-10,[[2,[3]],7.3],[[[[[[[[[-5]]]],2]]],1],4]]
            
            def getSum(piece):
                if len(piece)==0:
                    return 0
                elif type(piece[0]) is list:
                    return getSum(piece[0]) + getSum(piece[1:])
                else:
                    return piece[0] + getSum(piece[1:]) 
                    
            print(getSum(mylist))
            

            【讨论】:

              猜你喜欢
              • 2022-09-22
              • 2015-08-30
              • 2014-03-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-05
              • 1970-01-01
              • 2011-11-21
              相关资源
              最近更新 更多