No creo que las palabras reducibles sean un término que he escuchado antes, pero puedo googlear. Si está preguntando sobre palabras donde puede eliminar continuamente una sola letra, de modo que la palabra resultante se encuentre en un léxico dado, hasta que llegue a la cadena vacía “”? Para eso, * puede * evitar la recursividad, pero la recursividad facilita el algoritmo. Aquí hay un resumen de cómo me imagino que se vería el código Python:
def palabras reducibles (palabra_inicio, léxico):
candidatos = [palabra_inicio] # Esto contendrá palabras cuya reducibilidad aún no se ha verificado
while len (candidatos)> 0:
palabra = candidatos [0] # palabra es start_word o uno de sus descendientes
si la palabra == “”:
volver verdadero
- ¿Cómo se determinan las probabilidades de relación de probabilidad logarítmica para los códigos LDPC?
- ¿Es necesario asumir que una distribución de claves para el hashing para trabajar con O (1) garantiza que sí lo tiene?
- ¿Qué es la relajación en las matemáticas?
- ¿Qué es la reducción en la teoría de la complejidad computacional?
- ¿Me engañé buscando un algoritmo para calcular la secuencia de Fibonacci?
para i en rango (len (palabra)): # Foreach i en [0, word.length]
si la palabra [: i] + palabra [: i + 1] en el léxico: # Verifique si la palabra con el i-ésimo índice eliminado está en el léxico
is_reducible = True
candidatos.append (palabra) # Añadir al FINAL de candidatos
falso retorno
Probablemente haya formas de hacer esto más rápido (por ejemplo, haga primero los candidatos más cortos), pero esto debería funcionar como una prueba de concepto.
En general, casi todos los usos de las recursiones que encontrarás en entornos no académicos son lo que se llama “recursividad primitiva”. Eso significa que pueden reescribirse usando bucles. Para ver un ejemplo de una función recursiva que no se puede escribir sin recursividad, vea la función de Ackermann (que también es famosa por tomar mucho tiempo en calcular y dar números muy grandes). Aquí está el pseudocódigo para la función Ackermann, tomado directamente de su artículo de Wikipedia:
función Ackermann (m, n)
si m = 0
retorno n + 1
si m> 0 yn == 0
volver Ackermann (m – 1, n)
si m> 0 yn> 0
volver Ackermann (m – 1, Ackermann (m, n – 1))
[matemáticas] Ackermann (4, 2)> 10 ^ {19729} [/ matemáticas]