微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

阶乘使用递归函数跟踪了代码,但无法弄清楚为什么会出现错误

如何解决阶乘使用递归函数跟踪了代码,但无法弄清楚为什么会出现错误

def factorial_recursive(n):
    while n > 1:
        factorial = factorial * n
        factorial_recursive(n - 1)
    return factorial
num = input("Please enter the number whose factorial you want to find ")
num = int(num)
factorial = 1
if num == 0:
    print("The factorial of 0 is 1")
elif num < 0:
    print("The factorial of a negative number cannot be computed")
elif num == 1:
    print("The factorial of 1 is 1")
else:
    print("The factorial is",factorial_recursive(num))

错误消息:

UnboundLocalError                         Traceback (most recent call last)
<ipython-input-28-c3621871e051> in <module>()
     16 else:
     17     factorial = 1
---> 18     print("The factorial is",factorial_recursive(num))

<ipython-input-28-c3621871e051> in factorial_recursive(n)
      2 def factorial_recursive(n):
      3     while n > 1:
----> 4         factorial = factorial * n
      5         factorial_recursive(n - 1)
      6     return factorial

UnboundLocalError: local variable 'factorial' referenced before assignment

我已经看到了使用递归函数查找数字阶乘的工作代码。我试图自己做,并且在每个步骤都跟踪了代码,但无法弄清楚为什么它不起作用。

解决方法

factorial = factorial * n引用了一个从未创建的名为factorial的局部变量。因此,您使用的是未绑定变量。

似乎您正在尝试在函数之外的全局范围内引用factorial。在这种情况下,您需要使用global关键字

声明
def factorial_recursive(n):
    global factorial
    while n > 1:
        factorial = factorial * n
        factorial_recursive(n - 1)
    return factorial

请记住,使用global变量几乎总是一个糟糕的主意。

为什么不完全摆脱它并累积乘法呢?

def factorial_recursive(n):
    if n == 1:
        return 1
    return n * factorial_recursive(n - 1)

这是最常见和幼稚的递归阶乘实现。但这肯定比使用全局变量好得多。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。