File tree Expand file tree Collapse file tree 1 file changed +46
-0
lines changed
Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change 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 ()
You can’t perform that action at this time.
0 commit comments