TheAlgorithms-Python
66 строк · 1.8 Кб
1"""
2https://en.wikipedia.org/wiki/Lucas_number
3"""
4
5
6def recursive_lucas_number(n_th_number: int) -> int:
7"""
8Returns the nth lucas number
9>>> recursive_lucas_number(1)
101
11>>> recursive_lucas_number(20)
1215127
13>>> recursive_lucas_number(0)
142
15>>> recursive_lucas_number(25)
16167761
17>>> recursive_lucas_number(-1.5)
18Traceback (most recent call last):
19...
20TypeError: recursive_lucas_number accepts only integer arguments.
21"""
22if not isinstance(n_th_number, int):
23raise TypeError("recursive_lucas_number accepts only integer arguments.")
24if n_th_number == 0:
25return 2
26if n_th_number == 1:
27return 1
28
29return recursive_lucas_number(n_th_number - 1) + recursive_lucas_number(
30n_th_number - 2
31)
32
33
34def dynamic_lucas_number(n_th_number: int) -> int:
35"""
36Returns the nth lucas number
37>>> dynamic_lucas_number(1)
381
39>>> dynamic_lucas_number(20)
4015127
41>>> dynamic_lucas_number(0)
422
43>>> dynamic_lucas_number(25)
44167761
45>>> dynamic_lucas_number(-1.5)
46Traceback (most recent call last):
47...
48TypeError: dynamic_lucas_number accepts only integer arguments.
49"""
50if not isinstance(n_th_number, int):
51raise TypeError("dynamic_lucas_number accepts only integer arguments.")
52a, b = 2, 1
53for _ in range(n_th_number):
54a, b = b, a + b
55return a
56
57
58if __name__ == "__main__":
59from doctest import testmod
60
61testmod()
62n = int(input("Enter the number of terms in lucas series:\n").strip())
63print("Using recursive function to calculate lucas series:")
64print(" ".join(str(recursive_lucas_number(i)) for i in range(n)))
65print("\nUsing dynamic function to calculate lucas series:")
66print(" ".join(str(dynamic_lucas_number(i)) for i in range(n)))
67