Написать декоратор, который будет кэшировать результат вызова функции и отдавать его при последующих вызовах данной функции. Написать тот же самый декоратор, но с параметром, который будет показывать сколько раз отдавать кэшируемый результат. Если данный счетчик обнуляется, то выполняем функцию и вновь кешируем ее результат.