【问题标题】:Recursive number summing program returning "None" as the sum in Python递归数字求和程序在 Python 中返回“无”作为总和
【发布时间】:2014-06-05 00:33:13
【问题描述】:

我正在学习递归,并编写了这段代码来返回从 1 到所选数字的所有数字的总和。当我运行程序时,无论我最初输入什么数字,它给我的总和总是“无”,我的意思是,我的程序中 outputSum 变量的值似乎是“无”。我认为更改 SUM_OF_NUMBERS 的初始化值可能会改变这一点,但事实并非如此,我仍然得到“无”作为输出。谁能指出我的代码中导致此错误的部分?

def sumOfNumbers(number):

    SUM_OF_NUMBERS = 0

    if number > 0:
        SUM_OF_NUMBERS = SUM_OF_NUMBERS + number
    else:
        return SUM_OF_NUMBERS

    number = number - 1

    sumOfNumbers(number)

def main():

    repeat = 'Y'
    outputSum = 0

    while repeat == 'Y' or repeat == 'y':    
        print("Welcome to the Sum Of Numbers program!")
        number = int(input("\nPlease enter a number to sum up: "))

        outputSum = sumOfNumbers(number)

        print("\nThe sum of all numbers from 1 to " + str(number) + \
              " is " + str(outputSum))

        repeat = input("\nWould you like to sum up another number?" \
                       '\nEnter "Y" for "YES" or "N" for "NO": ')

        if repeat == 'N' or repeat == 'n':
            print("\nThank you for using the program.")
        else:
            print("\nSorry, that was not a valid option.")
            repeat = input('Please enter "Y" for "YES" or "N" for "NO": ')

main()

【问题讨论】:

    标签: python recursion sum


    【解决方案1】:

    你得到了None,因为当输入大于0时你没有返回任何东西。

    比你拥有的要简单得多。

    def sumOfNumbers(number):
        if number > 0:
            return number + sumOfNumbers(number-1)
        else:
            return 0
    

    【讨论】:

    • 这是一个更优雅的解决方案,谢谢。当输入大于零时,我没有意识到它会跳过返回任何内容。
    【解决方案2】:
    def sumOfNumbers(n):
      if n>0:
        return n+sumOfNumbers(n-1)
      else:
        return 0
    
    i = input("Enter a number")
    print "Sum of numbers:",sumOfNumbers(i)
    

    【讨论】:

      【解决方案3】:

      或者,只是预先测试边界条件,并处理(尾)递归,

      def sumOfNumbers(number):
          if number <= 0: return 0
          return number+sumOfNumbers(number-1)
      

      【讨论】:

        【解决方案4】:

        你的逻辑是正确的。问题是您每次都将 SUM_OF_NUMBERS 重置为 0。此外,它返回 None 因为您忘记了最终的 return 语句。为了解决这个问题,您可以将其作为参数传递,例如:

        def sumOfNumbers(number, SUM_OF_NUMBERS = 0):
        
            if number > 0:
                SUM_OF_NUMBERS = SUM_OF_NUMBERS + number
            else:
                return SUM_OF_NUMBERS
        
            number = number - 1
        
            return sumOfNumbers(number, SUM_OF_NUMBERS)
        

        【讨论】:

        • 我知道这是一个错误,每次运行它时很可能会返回零,但我更难过它返回 None 所以我想先解决这个问题。谢谢!
        【解决方案5】:

        有两件小事:

        1. 您的函数不返回任何内容
        2. 每次调用函数时都设置 SUM_OF_NUMBERS = 0。

        这里只是为了简化一个简短的代码:

        def recursive_sum(num):
          if num == 0:
            return 0
          return num + recursive_sum(num-1)
        

        【讨论】:

          猜你喜欢
          • 2019-09-12
          • 1970-01-01
          • 2020-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多