为什么
代码: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? 问题出在函数a的递归调用上。在递归调用时,应该使用return语句将结果返回给上一层调用,但是在代码中没有正确地返回结果。
解决方法是将递归调用的结果返回给上一层调用,修改代码如下:
def a(x):
global b
if x > 0:
b.append(x)
x = x - 1
return a(x)# 修改这一行
else:
return c(b)
这样修改后,递归调用的结果将会正确地返回给上一层调用,输出值就不再是None了。 你之所以得到的输出是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]