递归求和程序在Python中返回"None

1 投票
5 回答
677 浏览
提问于 2025-04-18 08:39

我正在学习递归,并写了一段代码来计算从1加到我选择的数字的总和。当我运行这个程序时,无论我输入什么数字,最后得到的总和总是“None”。也就是说,我的程序中输出的outputSum变量的值似乎是“None”。我以为改变SUM_OF_NUMBERS的初始值会有所不同,但结果并没有,我仍然得到“None”作为输出。有没有人能指出我代码中导致这个问题的部分?

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

5 个回答

0

你的逻辑是没问题的。问题在于你每次都把SUM_OF_NUMBERS重置为0了。而且,它返回None是因为你忘了最后的返回语句。要解决这个问题,你可以把它作为一个参数传进去,像这样:

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

有两件小事:

  1. 你的函数没有返回任何东西
  2. 每次调用这个函数时,你都把SUM_OF_NUMBERS设为0。

为了简单起见,这里有一段简短的代码:

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

另外,可以先检查一下边界条件,然后处理(尾部)递归。

def sumOfNumbers(number):
    if number <= 0: return 0
    return number+sumOfNumbers(number-1)
1
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)

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

2

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

其实这比你现在的代码简单多了。

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

撰写回答