2017-03-03 126 views
-2

我对python完全陌生,而且在返回factorial变量时遇到了问题。我想创建一个递归函数。我在第12,9和7行不断收到“分配前引用的局部变量”阶乘“的错误。任何帮助表示赞赏。Python:返回一个变量

global userinput 
userinput = input('What integer would you like to to find a total factorial  for?') 
def recursion(counter): 
    if counter < 3: 
    factorial = 1 
    if counter <= userinput: 
    factorial = factorial * counter 
    increase = counter + 2 
    recursion(increase) 
    else: 
    return factorial 
efactorial = recursion(2) 
ofactorial = recursion(1) 
tfactorial = efactorial + ofactorial 
+0

这部分:'factorial = factorial * counter'参考'factorial'(在右边),但它尚未设置为数字。 – James

+0

顺便说一句,数学模块具有阶乘函数 – abccd

回答

1

如果recusion功能counter超过3,则factorial将不会分配。因此,第二个表达式会触发未分配错误。试试这个:

def recursion(counter): 
    if counter < 3: 
     factorial = 1 
    else: 
     factorial = xx # Any value you want 
    ... 
+0

@Brantley,这是最好的答案。 –

0

眼前的问题

其他几个人已经指出,您使用的是你还没有定义的局部变量(给定的值),如果输入参数> = 3。紧接着,您使用的递归步骤,但随后忽略返回值:

increase = counter + 2 
recursion(increase) 

递归返回一个值,但是你不能把它的任何地方。因此,你完全失去了结果。

技术

一般情况下,你用递归来解决简单的问题,然后结合你的解决方案,简单的问题的结果。 有了你给的代码,它可能是这个样子:

factorial = counter * recursion(counter + 2) 
return factorial 

或者干脆

return counter * recursion(counter + 2) 

功能问题

我不知道为什么你分开奇数和偶数。你得到的结果并不是数学家所说的“阶乘”。

常用的方法

实际阶乘函数是一个常见的编程工作。规范的算法是从所需的数字开始,回到1.这是在你发布你的问题之前你应该做的研究;显然,你有一个不同的问题,并且你需要一个解决方案你的代码。