from functools import lru_cache from functools import cache @cache def steps_to(stair): if stair == 1: # You can reach the first stair with only a single step from the floor. return 1 elif stair == 2: # You can reach the second stair by jumping from the floor with a single two-stair hop or by jumping a single stair a couple of times. return 2 elif stair == 3: # You can reach the third stair using four possible combinations: # 1. Jumping all the way from the floor # 2. Jumping two stairs, then one # 3. Jumping one stair, then two # 4. Jumping one stair three times return 4 else: # You can reach your current stair from three different places: # 1. From three stairs down # 2. From two stairs down # 2. From one stair down # If you add up the number of ways of getting to those # those three positions, then you should have your solution. return steps_to(stair - 3) + steps_to(stair - 2) + steps_to(stair - 1) print(steps_to(35))