fibonacci.py
View source code here on GitHub!
Includes
- python.src.lib.fibonacci.fib_by_3(start_index: int = 0) Iterator[int]
This generator goes through the fibonacci sequence skipping by 3s. This works because:
F[n] = F[n-1] + F[n-2] F[n] = F[n-2] + F[n-3] + F[n-2] F[n] = 2 * F[n-2] + F[n-3] F[n] = 2 * (F[n-3] + F[n-4]) + F[n-3] F[n] = 3 * F[n-3] + 2 * F[n-4] F[n] = 3 * F[n-3] + F[n-4] + F[n-5] + F[n-6] F[n] = 4 * F[n-3] + F[n-6]
1from typing import Iterator
2
3from .iters import consume
4
5
6def fib() -> Iterator[int]:
7 """This generator goes through the fibonacci sequence"""
8 a, b = 0, 1
9 while True:
10 yield b
11 a, b = b, a + b
12
13
14def fib_by_3(start_index: int = 0) -> Iterator[int]:
15 """This generator goes through the fibonacci sequence skipping by 3s. This works because:
16
17 .. code-block:: python
18
19 F[n] = F[n-1] + F[n-2]
20 F[n] = F[n-2] + F[n-3] + F[n-2]
21 F[n] = 2 * F[n-2] + F[n-3]
22 F[n] = 2 * (F[n-3] + F[n-4]) + F[n-3]
23 F[n] = 3 * F[n-3] + 2 * F[n-4]
24 F[n] = 3 * F[n-3] + F[n-4] + F[n-5] + F[n-6]
25 F[n] = 4 * F[n-3] + F[n-6]
26 """
27 orig = fib()
28 a = 0
29 consume(orig, start_index)
30 next(orig) # start + 1
31 next(orig) # start + 2
32 b = next(orig) # start + 3
33 del orig
34 yield a
35 while True:
36 yield b
37 a, b = b, a + b * 4