[Solved] Error in Factorial Program in Python


You never alter self.n, so it’ll always be greater or equal to 1. You created an endless loop. It’s set to 1 in __init__ so self.n >= 1 is true each time you test.

You should not use a local variable and a parameter to track the current state of the factorial function. Pick one or the other.

Without a parameter:

class Factorial:
    def __init__(self, n):
        self.n = n
    def fact(self):
        n = self.n
        if n >= 1:
            self.n -= 1
            return n * self.fact()
        else:
            return 1

Note that you now pass the initial value of n to the class, to create an instance:

>>> f = Factorial(4)
>>> f.fact()
24
>>> f.n
0

This isn’t all that useful, because now the instance has n set to 0. Unless you assign something different to that attribute, calling f.fact() again will only produce 1 now.

This is not really a problem that needs to be solved with a class. If you pass the initial value of n is as a pramater, you don’t need an instance to track the state and you can just use a normal function:

def fact(n):
    if n >= 1:
        return n * fact(n - 1)
    else:
        return 1

The fact() function can be called as often as needed, with different values for n:

>>> fact(4)
24
>>> fact(8)
40320

1

solved Error in Factorial Program in Python