You can check that this function is much faster with the cache.
from functools import lru_cache
@lru_cache(1000)
def n_paths(start=1, end=5, jumps=(1, 2)):
    if start > end:
        return 0
    if start == end:
        return 1
    return sum([n_paths(start=start + j, end=end) for j in jumps])
The benchmarking script can be found below.
import time
for e in [10, 30, 31, 32, 33]:
    tic = time.time()
    n_paths(start=1, end=e)
    print(f"end={e} took {time.time() - tic}")