algoritmos recursivos son los algoritmos que pueden llamarse a sí mismos como parte de su solución. Estas funciones suelen trabajar en los problemas que contienen una serie de idéntica sub-problemas , al igual que el recorrido del árbol o el cálculo factorial . Llamar varias veces la misma función una y otra puede hacer un trabajo lento , a pesar de que podría hacer la codificación simple. Para aumentar la velocidad de ejecución , puede volver a crear algoritmos recursivos , tales como el algoritmo factorial , en un algoritmo ligeramente más complicado iterativo utilizando bucles que se ejecutarán mucho más rápido . Instrucciones
1
Analizar el algoritmo recursivo . En este ejemplo , utilizará la solución recursiva para el problema factorial :
int factorial ( int hecho ) {
if ( hecho == 0 ) {return 1 ;} else { hecho de devolución * factorial ( hecho - 1 ) ;} }
2
Decidir si los argumentos de la función se llevará a cabo en variables. En el ejemplo factorial , los resultados de el factorial se pueden almacenar en una variable " total_factorial " para la duración de cualquier iteración . Este ejemplo muestra el algoritmo factorial recursiva y la variable que se utilizará para el argumento recursivo :
total_factorial int = 0 :
3
Determinar una estructura de bucle . En C + + , por ejemplo , el bucle ", mientras que " funciona bien con iteraciones que tienen una longitud indeterminada . " Para " bucles , por otro lado , funciona bien cuando un bucle irá por una duración estricta , representado por un número entero de algún tipo . Para el ejemplo factorial , un bucle "for" va a funcionar bien :
int factorial = 5 ; total_factorial int = 0 ;
4
Determinar detener condiciones. Por lo general , como en el ejemplo factorial , la recursión terminará cuando se cumpla una condición . En un bucle interative , como el bucle , es muy útil saber de antemano . Ya sabes que en encontrar el factorial de un número " n " que va a repetir n- 1 veces ( excepto el cero ) , se puede empezar a la una y se extenderán hasta el número factorial :
for (int i = 1 ; i < = factorial , i + + ) { if ( i == 1 ) { total_factorial = 1 ;} else { totales factorial * = i ;} }