¿Hay una mejor manera que la recursividad para encontrar palabras reducibles?

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

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]