Вы получаете ту же строку обратно, потому что вы строите ту же строку снова.
На примере «ABC» вы увидите, что делает функция:
reverseit ("ABC") возвращает 'A' + reverseit ("BC")
reverseit ("BC") возвращает 'B' + reverseit ("C")
reverseit ("C") возвращает 'C'
Вы бы хотели
char firstChar = input.at(0);
return reverseit(deleteFirstElement(input)) + firstChar;
Но на самом деле вы должны искать другое решение. Рекурсия
- уменьшает читабельность
- медленно
- использует много стековой памяти
- легко создает трудные для отладки бесконечные циклы
в общем, следует избегать, если это возможно. Конечно, некоторые решения действительно элегантны, но циклы почти всегда быстрее.