问题描述
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)
这是最常见和幼稚的递归阶乘实现。但这肯定比使用全局变量好得多。