|
1 |
| -# Lucas Sequence Using Recursion |
| 1 | +""" |
| 2 | +https://en.wikipedia.org/wiki/Lucas_number |
| 3 | +""" |
2 | 4 |
|
3 | 5 |
|
4 |
| -def recur_luc(n): |
| 6 | +def recursive_lucas_number(n): |
5 | 7 | """
|
6 |
| - >>> recur_luc(1) |
| 8 | + Returns the nth lucas number |
| 9 | + >>> recursive_lucas_number(1) |
7 | 10 | 1
|
8 |
| - >>> recur_luc(0) |
| 11 | + >>> recursive_lucas_number(20) |
| 12 | + 15127 |
| 13 | + >>> recursive_lucas_number(0) |
9 | 14 | 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. |
10 | 21 | """
|
11 | 22 | if n == 1:
|
12 | 23 | return n
|
13 | 24 | if n == 0:
|
14 | 25 | 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 |
16 | 58 |
|
17 | 59 |
|
18 | 60 | 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