Skip to content

Commit b93a9d8

Browse files
authored
Update lucas_series.py to include another method (#3620)
* Update lucas_series.py Added another method to calculate lucas_numbers * Fix pre-commit error * Update lucas_series.py * Update lucas_series.py * Update lucas_series.py * Update lucas_series.py
1 parent 81b82be commit b93a9d8

File tree

1 file changed

+56
-9
lines changed

1 file changed

+56
-9
lines changed

Diff for: maths/lucas_series.py

+56-9
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,69 @@
1-
# Lucas Sequence Using Recursion
1+
"""
2+
https://en.wikipedia.org/wiki/Lucas_number
3+
"""
24

35

4-
def recur_luc(n):
6+
def recursive_lucas_number(n):
57
"""
6-
>>> recur_luc(1)
8+
Returns the nth lucas number
9+
>>> recursive_lucas_number(1)
710
1
8-
>>> recur_luc(0)
11+
>>> recursive_lucas_number(20)
12+
15127
13+
>>> recursive_lucas_number(0)
914
2
15+
>>> recursive_lucas_number(25)
16+
167761
17+
>>> recursive_lucas_number(-1.5)
18+
Traceback (most recent call last):
19+
...
20+
TypeError: recursive_lucas_number accepts only integer arguments.
1021
"""
1122
if n == 1:
1223
return n
1324
if n == 0:
1425
return 2
15-
return recur_luc(n - 1) + recur_luc(n - 2)
26+
if not isinstance(n, int):
27+
raise TypeError("recursive_lucas_number accepts only integer arguments.")
28+
29+
return recursive_lucas_number(n - 1) + recursive_lucas_number(n - 2)
30+
31+
32+
def dynamic_lucas_number(n: int) -> int:
33+
"""
34+
Returns the nth lucas number
35+
>>> dynamic_lucas_number(1)
36+
1
37+
>>> dynamic_lucas_number(20)
38+
15127
39+
>>> dynamic_lucas_number(0)
40+
2
41+
>>> dynamic_lucas_number(25)
42+
167761
43+
>>> dynamic_lucas_number(-1.5)
44+
Traceback (most recent call last):
45+
...
46+
TypeError: dynamic_lucas_number accepts only integer arguments.
47+
"""
48+
if not isinstance(n, int):
49+
raise TypeError("dynamic_lucas_number accepts only integer arguments.")
50+
if n == 0:
51+
return 2
52+
if n == 1:
53+
return 1
54+
a, b = 2, 1
55+
for i in range(n):
56+
a, b = b, a + b
57+
return a
1658

1759

1860
if __name__ == "__main__":
19-
limit = int(input("How many terms to include in Lucas series:"))
20-
print("Lucas series:")
21-
for i in range(limit):
22-
print(recur_luc(i))
61+
from doctest import testmod
62+
63+
testmod()
64+
n = int(input("Enter the number of terms in lucas series:\n").strip())
65+
n = int(input("Enter the number of terms in lucas series:\n").strip())
66+
print("Using recursive function to calculate lucas series:")
67+
print(" ".join(str(recursive_lucas_number(i)) for i in range(n)))
68+
print("\nUsing dynamic function to calculate lucas series:")
69+
print(" ".join(str(dynamic_lucas_number(i)) for i in range(n)))

0 commit comments

Comments
 (0)