Skip to content

Commit d4d94d4

Browse files
committed
Add leonardo numbers algorithm
1 parent 8934bab commit d4d94d4

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

maths/leonardo_numbers.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
def leonardo_numbers(n: int) -> int:
2+
"""
3+
Return the n-th Leonardo number.
4+
5+
The Leonardo numbers are a sequence of numbers given by the recurrence:
6+
L(n) = L(n-1) + L(n-2) + 1
7+
with initial values L(0) = 1 and L(1) = 1.
8+
9+
Reference: https://en.wikipedia.org/wiki/Leonardo_number
10+
11+
>>> leonardo_numbers(0)
12+
1
13+
>>> leonardo_numbers(1)
14+
1
15+
>>> leonardo_numbers(2)
16+
3
17+
>>> leonardo_numbers(3)
18+
5
19+
>>> leonardo_numbers(4)
20+
9
21+
>>> leonardo_numbers(20)
22+
21891
23+
>>> leonardo_numbers(-1)
24+
Traceback (most recent call last):
25+
...
26+
ValueError: n must be a non-negative integer
27+
>>> leonardo_numbers(1.5)
28+
Traceback (most recent call last):
29+
...
30+
ValueError: n must be a non-negative integer
31+
"""
32+
if not isinstance(n, int) or n < 0:
33+
raise ValueError("n must be a non-negative integer")
34+
35+
if n == 0 or n == 1:
36+
return 1
37+
38+
a, b = 1, 1
39+
for _ in range(n - 1):
40+
a, b = b, a + b + 1
41+
42+
return b
43+
44+
if __name__ == "__main__":
45+
import doctest
46+
doctest.testmod()

0 commit comments

Comments
 (0)