Я не уверен, считается ли это «изменением формата функции», но вот мое замечание по рекурсивной версии без слайсов:
def is_palindrome(s):
def is_palindrome_r(i, j):
if j <= i:
return True
if s[i] != s[j]:
return False
return is_palindrome_r(i + 1, j - 1)
return is_palindrome_r(0, len(s) - 1)
Внутренняя функция, is_palindrome_r
, является рекурсивнойфункция, которая принимает два индекса, i
и j
.Последняя строка устанавливает начальные позиции для этих двух индексов на 0
(начало строки) и len(s) - 1
(конец строки) и продолжает рекурсивную логику.У рекурсивной функции есть два условия выхода:
- , если
j <= i
мы достигли центра нашего палиндрома.Если мы дошли до этого уровня, мы знаем, что все остальные пары символов совпадают, и нам не нужно больше сравнивать. - , если два символа указывают на
i
и j
не соответствует, это определенно не палиндром, и нам не нужно больше сравнивать.
В противном случае мы еще не знаем, является ли последовательность полностью палиндромной, поэтомумы перемещаем наши индексы на один шаг внутрь (i + 1, j - 1
) и возвращаемся к шагу 1.