Python:递归阶乘

Python:递归阶乘,python,class,recursion,factorial,Python,Class,Recursion,Factorial,我是这个编码世界的新手。对不起,这样的问题。 我试图使用类运行阶乘函数。但出现以下错误:“TypeError:factorial()缺少1个必需的位置参数:'input'” 你们能给我解释一下这里的问题以及如何解决这个问题吗 class cool: def __init__(self, input): self.input = input def factorial(self, input): self.input = input if self.input ==

我是这个编码世界的新手。对不起,这样的问题。 我试图使用类运行阶乘函数。但出现以下错误:“TypeError:factorial()缺少1个必需的位置参数:'input'”

你们能给我解释一下这里的问题以及如何解决这个问题吗

class cool:

def __init__(self, input):
    self.input = input



def factorial(self, input):
    self.input = input
    if self.input == 0 :
        return(1)
    else:
        return( factorial(self.input-1) * self.input)


var = cool(3)
print(var.factorial())

使用选项卡时,方法必须在类中。
也许使用模块数学中的函数阶乘更好?

我不知道为什么要用类来做这个

以下是修复方法:

class cool:

    def __init__(self, input):
        self.input = input + 1  #<----

    def factorial(self): #<----
        if self.input == 1 : #<----
            return 1 
        else:
            self.input -= 1 #<----
            result = self.input * self.factorial()  #<----
            return result 


var = cool(3)
print(var.factorial())
class-cool:
定义初始化(自我,输入):

self.input=input+1#我将回应其他人的评论,在这样的类中编写
factorial
是很奇怪的,但希望它也能演示类方法是如何递归的

递归是一种函数遗产,因此将其与函数风格结合使用会产生最好的结果。这意味着避免突变、变量重新分配和其他副作用-

class-cool:
定义初始值(self,v):
自我评价,自我评价
def阶乘(自):
如果self.v==0:
返回1
其他:
返回self.v*cool(self.v-1).factorial()
print(cool(3.factorial())
打印(cool(4.factorial())
打印(cool(5.factorial())
打印(cool(6.factorial())
打印(cool(7.factorial())
6
24
120
720
5040
你可以考虑的一个调整是负数的处理——

class-cool:
定义初始值(self,v):
自我评价,自我评价
def阶乘(自):
如果self.v==0:
返回1
elif self.v<0:
return-1*cool(self.v*-1).factorial()
其他:
返回self.v*cool(self.v-1).factorial()
现在它适用于正数和负数-

print(cool(7.factorial())
打印(酷(-7).factorial())
5040
-5040

self.input
更改为
input
无处不在,并将
3
传递给函数而不是类构造函数。当然,您随后可以在类中创建此函数
@static
(并去掉传递给它的
self
),因此,您可以了解为什么尝试将类放在所有位置都不一定是一个好主意。不要制造混乱,保持简单,使用函数。我根本不知道你需要什么
self.input
。您只需要(并使用)factorial的
输入
参数,为此您必须将其称为
var.factorial(3)
,虽然两者都是真的,但OP的错误表明代码实际上是正确缩进的,问题出在其他地方。我认为您不应该使用
self.input==1
作为基本情况<代码>0
等于空积,
1
。实际上,这将使结果为0。这就是为什么used
self.input==1
在使用
self.input==0
时必须进行修改的原因。谢谢你指出这一点。顺便说一句,提前祝你圣诞快乐:)