黎子卿 发表于 2023-8-18 10:05:51

为什么

代码:
def c(y):
    d = 1
    for i in y:
      d = d*i
    return d
   
b = []
def a(x):
    global b
    if x>0:
      b.append(x)
      x = x-1
      a(x)
    else:
      return c(b)
num = int(input("输入整数:"))
print(a(num))
这一段代码写了用来求一个正整数的阶乘。为什么输入任何值,输出值都是None?      

isdkz 发表于 2023-8-18 10:06:02

问题出在函数a的递归调用上。在递归调用时,应该使用return语句将结果返回给上一层调用,但是在代码中没有正确地返回结果。

解决方法是将递归调用的结果返回给上一层调用,修改代码如下:

def a(x):
    global b
    if x > 0:
      b.append(x)
      x = x - 1
      return a(x)# 修改这一行
    else:
      return c(b)


这样修改后,递归调用的结果将会正确地返回给上一层调用,输出值就不再是None了。

陶远航 发表于 2023-8-18 10:06:26

你之所以得到的输出是None,是因为在函数a(x)中没有返回任何值。

在你的代码中,当x > 0时,将x添加到列表b中,并递归调用a(x-1)。然而,在递归结束后,并没有显式地返回任何值。因此,默认情况下,Python 函数将返回None。

要修复这个问题,你可以在递归调用之前添加返回语句,将递归调用的结果返回给调用者。修正后的代码如下所示:

def c(y):
    d = 1
    for i in y:
      d = d*i
    return d

b = []

def a(x):
    global b
    if x > 0:
      b.append(x)
      x = x - 1
      return a(x)   # 修正:添加返回语句
    else:
      return c(b)

num = int(input("输入整数:"))
print(a(num))


这样,当 a(x) 递归调用结束后,会返回递归调用的结果,最终得到正确的输出。

希望能够解决你的问题!如果还有其他疑问,请随时提出。
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 为什么