Добрый день. Задача из курса по алгоритмам, конкретно - из раздела Рекурсия. Но я попытался решить её комбинаторно и не преуспел. Собственно, задача:
Цитата:
На расстоянии
шагов от магазина стоит человек. Каждую секунду он выбирает, куда сделать шаг: к магазину или в противоположном направлении. Напишите программу, которая определит, сколькими способами он может попасть в магазин, пройдя ровно
шагов и оказавшись в магазине только после выполнения последнего шага.
На вход подаются через пробел два целых числа
– расстояние до магазина в шагах и
– требуемое количество шагов, которые должен сделать человек:
На выход следует подать только одно число - количество способов попадания в магазин.
Человек стоит на расстоянии
шагов, а сделать должен
шагов. При
шагов всё ясно, количество способов равно
. Рассмотрим остальные случаи:
.
Шаги можно делать по прямой в двух направлениях: к магазину (пусть это будет "вправо") и от магазина (соответственно, "влево"). Всего шагов должно быть
, из них
шагов влево и, соответственно,
шагов вправо.
Насколько я понимаю, необходимо каким-то образом распределить
шагов влево среди
шагов.
В данном случае размещаем подмножество однородных элементов (шагов влево), порядок которых не важен. Это, как я подумал, сочетания без повторений:
.
Но явно ошибся / чего-то не учёл, хотя не могу понять, чего. Задача не решается, хотя кажется несложной, к моему стыду.