鱼C论坛

 找回密码
 立即注册
查看: 2001|回复: 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

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

  1. def c(y):
  2.     d = 1
  3.     for i in y:
  4.         d = d*i
  5.     return d

  6. b = []

  7. def a(x):
  8.     global b
  9.     if x > 0:
  10.         b.append(x)
  11.         x = x - 1
  12.         return a(x)   # 修正:添加返回语句
  13.     else:
  14.         return c(b)

  15. num = int(input("输入整数:"))
  16. print(a(num))
复制代码


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

希望能够解决你的问题!如果还有其他疑问,请随时提出。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-18 10:06:02 | 显示全部楼层
问题出在函数a的递归调用上。在递归调用时,应该使用return语句将结果返回给上一层调用,但是在代码中没有正确地返回结果。

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

  1. def a(x):
  2.     global b
  3.     if x > 0:
  4.         b.append(x)
  5.         x = x - 1
  6.         return a(x)  # 修改这一行
  7.     else:
  8.         return c(b)
复制代码


这样修改后,递归调用的结果将会正确地返回给上一层调用,输出值就不再是None了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-18 10:06:26 | 显示全部楼层    本楼为最佳答案   
你之所以得到的输出是None,是因为在函数a(x)中没有返回任何值。

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

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

  1. def c(y):
  2.     d = 1
  3.     for i in y:
  4.         d = d*i
  5.     return d

  6. b = []

  7. def a(x):
  8.     global b
  9.     if x > 0:
  10.         b.append(x)
  11.         x = x - 1
  12.         return a(x)   # 修正:添加返回语句
  13.     else:
  14.         return c(b)

  15. num = int(input("输入整数:"))
  16. print(a(num))
复制代码


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

希望能够解决你的问题!如果还有其他疑问,请随时提出。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 01:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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