鱼C论坛

 找回密码
 立即注册
查看: 1026|回复: 2

[已解决]为什么

[复制链接]
发表于 2023-8-18 10:05:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
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?      
最佳答案
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) 递归调用结束后,会返回递归调用的结果,最终得到正确的输出。

希望能够解决你的问题!如果还有其他疑问,请随时提出。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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) 递归调用结束后,会返回递归调用的结果,最终得到正确的输出。

希望能够解决你的问题!如果还有其他疑问,请随时提出。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-11 14:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表