Этот метод делит строку пополам и переставляет местами половины. Во внутренние вызовы передаются уже половины строк. Деление пополам конечно - в какой-то момент фрагмент строки будет длины 1 или 0. Чтобы обратить строку единичной длины или пустую строку, ничего делать не нужно, поэтому, если длина строки <=1, возвращается та же самая строка, - так достигается база.
Пример. В качестве символов для удобства возьмём цифры.
1) Данные уходят в глубь рекурсивных вызовов:
(12345)
((12) (345))
(((1) (2)) ((3) (45)))
Когда функция получает строку длины 1, то возвращает её же. А строка "45" уйдёт ещё на один шаг вглубь. Тем временем в вызовах, получивших обратно данные, результаты переставляются местами и возвращается получившаяся строка:
((21) ((3) ((4) (5))))
((21) ((3) (54)))
((21) (543))
(54321)