Задача из темы "Рекурсия, перебор", поэтому решим её через рекурсию, но также рассмотрим решение методом динамического программирования. Читаем условие: Рекурсия Разобьём нашу задачу размера N на подзадачи меньшего размера. Однако нельзя вычислить количество лесенок из N кубиков, зная ответы для меньшего числа, потому что они будут включать лесенки с одним кубиком на вершине (а такие лесенки никак не увеличить). Поэтому подзадачи будут с двумя параметрами: сколько существует лесенок из N кубиков, чтобы верхний ряд содержал не меньше M. Тогда, чтобы решить задачу для параметров N и M, надо перебрать все возможные варианты для верхнего ряда i (от M до N) и взять ответы для подзадач N - 1 и i + 1. По сути, это уже и есть описание рекурсивной функции. Давайте её запишем: Здесь мы добавили условие выхода из рекурсии: если N < M, то ответ 0, так как нам не хватает кубиков, чтобы заполнить даже верхний ряд. Чтобы ужать решение (и сделать его менее читаемым), можно map и lamda заменить на гене