Hi Stetim

I've got this piece of code for calculating factorials, which works:

```
def factorial(x):
if x > 1:
return x * factorial(x - 1)
else:
return 1
```

Before that I had this:

```
def factorial(x):
if x > 0:
return x * factorial(x - 1)
else:
return 0
```

Which would always return 0

And even before that I had this:

```
def factorial(x):
if x > 0:
return x * factorial(x - 1)
```

Which would return this error:

```
factorial(10)
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
factorial(10)
File "<pyshell#61>", line 3, in factorial
return x * factorial(x - 1)
File "<pyshell#61>", line 3, in factorial
return x * factorial(x - 1)
File "<pyshell#61>", line 3, in factorial
return x * factorial(x - 1)
[Previous line repeated 6 more times]
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'
```

Could you help me understand why the 2nd function would always return 0 and what the error of the 3rd function is and why it happens?

Thanks a ton

EDIT: I realized the 2nd function would always return 0 because in the last iteration it would return 0 and hence multiply my so far result by 0, resulting in 0.

So only need help with the 3rd function now

EDIT 2: Just figured out that in the 3rd function, once x reached 0, it would return None, which isn't a supported type for multiplication.

This can be closed now

Thanks a lot !