s[0], s[-1] = s[-1], s[0]
Это изменяет список ввода. Похоже, что вы намереваетесь поменять местами два значения на входе с данным вызовом и использовать рекурсию для покрытия каждой необходимой пары значений.
self.reverseString(s[1:-1])
Это делает рекурсивный вызов для только что созданного list , а игнорирует результат . Он не заменяет больше содержимого из исходного списка.
Нет причин изменять ввод на месте. Это не простое решение и ограничивает виды последовательностей, которые вы можете обрабатывать. В общем, вы хотите, чтобы рекурсивные функции генерировали новые значения и оставляли свои входные данные в покое - это намного , чтобы легче рассуждать о них таким образом. (Кроме того, вы можете обрабатывать строки и кортежи автоматически.)
Один простой подход заключается в следующем: мы признаем, что первый символ ввода должен стоять последним в выводе, а затем мы можем получить оставшуюся часть строки с помощью реверсирование остальной части ввода - что мы можем сделать, сделав рекурсивный вызов для остальной части ввода. Это естественно приводит к решению @ HarshalParekh.