Función recursiva palíndromo en Python

Necesito ayuda para escribir una función recursiva que detecte si una cadena es un palíndromo. Pero no puedo usar ningún bucle, debe ser recursivo. ¿Puede alguien ayudarme a mostrar cómo se hace esto? Necesito aprender esto para un próximo examen de medio término. Estoy usando Python.

def ispalindrome(word): if len(word) < 2: return True if word[0] != word[-1]: return False return ispalindrome(word[1:-1]) 

Y aquí está el mejor forro.

 def ispalindrome(word): return word == word[::-1] 

Desde una perspectiva de algoritmo general, la función recursiva tiene 3 casos:

1) Quedan 0 artículos . El artículo es un palíndromo , por identidad.

2) Queda 1 artículo . El artículo es un palíndromo , por identidad.

3) 2 o más artículos . Quitar primero y último elemento. Comparar. Si son iguales, llama a la función en lo que queda de la cadena. Si el primero y el último no son lo mismo, el elemento no es un palíndromo .

La implementación de la función en sí se deja como un ejercicio para el lector 🙂

Si una cadena es cero o una letra larga, es un palíndromo.

Si una cadena tiene la primera y la última letra iguales, y las letras restantes (creo que es una [1: -1] en Python, pero Python está un poco oxidada) son palíndromos, es un palíndromo.

Ahora, escribe eso como una función de palíndromo que toma una cadena. Se llamará a sí mismo.

Aquí hay otro punto de vista.

Una cuerda palindrómica es

  1. Alguna letra, x .

  2. Algunos sustratos palindrómicos.

  3. La misma letra, x , repetida.

Además, tenga en cuenta que se le puede dar una oración correcta en inglés “Poder si yo vi a Elba”. con puntuacion. Es posible que el verificador de palíndromo deba omitir la puntuación de forma silenciosa. Además, es posible que tenga que coincidir tranquilamente sin considerar el caso. Esto es un poco más complejo.

  1. Algunos puntuacion principal. Alguna letra, x .

  2. Alguna subcadena palindrómica.

  3. Alguna letra, x , repetida sin tener en cuenta el caso. Algunos puntuacion final.

Y, por definición, una cadena de longitud cero es un palíndromo. También una cadena de una sola letra (después de eliminar la puntuación) es un palíndromo.

Ya que estamos publicando el código de todos modos, y aún no se ha publicado una sola línea, aquí va:

 def palindrome(s): return len(s) < 2 or s[0] == s[-1] and palindrome(s[1:-1]) 

La función debe esperar una cadena. Si hay más de una letra en la cadena, compare la primera y la última letra. Si 1 o 0 letras, devuelve verdadero. Si las dos letras son iguales, llame a la función y luego nuevamente con la cadena, sin la primera y la última letra. Si no son iguales devuelven falso.

  palindrom( word): IF length of word 1 or 0 THEN return 0; IF last and first letter equal THEN word := remove first and last letter of word; palindrom( word); ELSE return false; 

Esta es una forma en que puede pensar en funciones recursivas simples … evite el problema y piense de esa manera. ¿Cómo se hace un palíndromo recursivamente? Así es como lo haría …

 def make_palindrome(): maybe: return "" elsemaybe: return some_char() else: c = some_char() return c + make_palindrome() + c 

Luego puedes darle la vuelta para construir la prueba.

 a=raw_input("enter the string:") b=len(a) c=0 for i in range(b): if a[i]==a[-(i+1)]: c=c+1 if c==b: print a,"is polindrome" else: print a,"is not polindrome" 

Mi solución

 #To solve this I'm using the stride notation within a slice [::] def amazonPalindrome(input): inputB = input input = input[::-1] #print input noPalindrome = inputB + " is not a palindrome" isPalindrome = inputB + " is a palindrome" #compare the value of the reversed string to input string if input[0]!= input[-1]: print noPalindrome else: print isPalindrome #invoking the def requires at least 1 value or else it fails #tests include splitting the string,mixing integers, odd amount palindromes. #call the def amazonPalindrome('yayay') 
 n=raw_input("Enter a number===>") n=str(n) l=len(n) s="" for i in range(1,l+1): s=s+n[li] if s==n: print "Given number is polindrom" else: print "Given number is not polindrom" 

¡Aquí está la versión C, si alguien llega aquí buscando el código C!

 int IsPalindrome_Recursive(char *s, int start, int end) { if ((end - start) < 2) { return 1; } if (s[start] != s[end]) { return 0; } return IsPalindrome_Recursive(s, ++start, --end); } 

Llamar como

 IsPalindrome_Recursive(s, 0, strlen(s) - 1)