Skip to content

Commit 99ebd1a

Browse files
pooja-git11cclauss
andcommitted
Create factorial_iterative.py (TheAlgorithms#1693)
* Create factorial_iterative.py * Update factorial_iterative.py * Update factorial_iterative.py * Update factorial_iterative.py * print(f"factorial{n} is {factorial(n)}") * Update factorial_recursive.py Co-authored-by: Christian Clauss <[email protected]>
1 parent bfcb95b commit 99ebd1a

File tree

2 files changed

+41
-13
lines changed

2 files changed

+41
-13
lines changed

maths/factorial_iterative.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# factorial of a positive integer -- https://en.wikipedia.org/wiki/Factorial
2+
3+
4+
def factorial(n: int) -> int:
5+
"""
6+
>>> import math
7+
>>> all(factorial(i) == math.factorial(i) for i in range(20))
8+
True
9+
>>> factorial(0.1)
10+
Traceback (most recent call last):
11+
...
12+
ValueError: factorial() only accepts integral values
13+
>>> factorial(-1)
14+
Traceback (most recent call last):
15+
...
16+
ValueError: factorial() not defined for negative values
17+
"""
18+
if n != int(n):
19+
raise ValueError("factorial() only accepts integral values")
20+
if n < 0:
21+
raise ValueError("factorial() not defined for negative values")
22+
value = 1
23+
for i in range(1, n + 1):
24+
value *= i
25+
return value
26+
27+
28+
if __name__ == "__main__":
29+
n = int(input("Enter a positivve integer: ").strip() or 0)
30+
print(f"factorial{n} is {factorial(n)}")

maths/factorial_recursive.py

+11-13
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
11
def factorial(n: int) -> int:
22
"""
3-
Calculate the factorial of specified number
3+
Calculate the factorial of a positive integer
4+
https://en.wikipedia.org/wiki/Factorial
45
5-
>>> factorial(1)
6-
1
7-
>>> factorial(6)
8-
720
9-
>>> factorial(0)
10-
1
11-
>>> factorial(-1)
12-
Traceback (most recent call last):
13-
...
14-
ValueError: factorial() not defined for negative values
6+
>>> import math
7+
>>> all(factorial(i) == math.factorial(i) for i in range(20))
8+
True
159
>>> factorial(0.1)
1610
Traceback (most recent call last):
1711
...
1812
ValueError: factorial() only accepts integral values
13+
>>> factorial(-1)
14+
Traceback (most recent call last):
15+
...
16+
ValueError: factorial() not defined for negative values
1917
"""
20-
if n < 0:
21-
raise ValueError("factorial() not defined for negative values")
2218
if not isinstance(n, int):
2319
raise ValueError("factorial() only accepts integral values")
20+
if n < 0:
21+
raise ValueError("factorial() not defined for negative values")
2422
return 1 if n == 0 or n == 1 else n * factorial(n - 1)
2523

2624

0 commit comments

Comments
 (0)