Алгоритм
Алгоритм рекурсивно применяет набор правил ко входному списку конфет candies,
пока не будет достигнуто стабильное состояние, когда у каждого ребенка окажется не более одной конфеты.
В каждой итерации алгоритм идентифицирует элемент массива, в котором имеются две или более конфет,
и перекладывает по одной конфете в соседние элементы.
Этот процесс повторяется до тех пор, пока во всех элементах будет не более одной конфеты,
после чего алгоритм завершает работу и возвращает количество шагов,
потребовавшихся для достижения этого состояния.
Вот подробное описание шагов алгоритма.
- Принимается два параметра: candies – список целых чисел, представляющий количество конфет,
которые есть у каждого ребенка, и states (необязательный параметр) – целое число,
представляющее количество шагов, потребовавшихся программе для достижения текущего состояния
(по умолчанию имеет значение 0).
- Проверяется, достигнут ли базовый случай.
Если количество детей, имеющих 0 или 1 конфету, равно общему количеству детей,
то возвращается количество шагов.
- Создается копия списка candies для текущего шага.
- Выполняется обход элементов в списке candies.
- Проверяется, есть ли у текущего ребенка хотя бы две конфеты.
- Если да, то из соответствующего элемента удаляются две конфеты и
в соседние элементы добавляется по одной конфете
(т. е. передаются детям слева и справа).
- Вышеуказанные шаги продолжают выполняться рекурсивно
с обновленным списком candies и увеличенным значением states.
- По достижении базового случая возвращается конечное значение states.