Tecnología

Inicio

Cómo convertir Recursivo para iterativa

algoritmos recursivos son los algoritmos que pueden llamar a sí mismos como parte de su solución. Estas funciones a menudo trabajan en los problemas que contienen una serie de sub-problemas idénticos, al igual que el recorrido del árbol o el cálculo factorial. En varias ocasiones llamando a la misma función una y otra puede hacer un trabajo lento, a pesar de que podría hacer la programación más sencilla. Para aumentar la velocidad de ejecución, puede volver a crear algoritmos recursivos, tales como el algoritmo factorial, en un algoritmo iterativo ligeramente más complicado el uso de bucles que se ejecutarán más rápido.

Instrucciones

1 Analizar el algoritmo recursivo. En este ejemplo, se utiliza la solución para el problema recursivo factorial:

int factorial (int hecho) {

si (hecho == 0) {
volver 1;
}más{
hecho de volver * factorial (de hecho - 1);
}
}

2 Decidir si los argumentos de la función se llevará a cabo en las variables. En el ejemplo factorial, los resultados de la factorial se pueden almacenar en un "total_factorial" variable para la duración de cualquier iteración. Este ejemplo muestra el algoritmo recursivo factorial y la variable que se utilizará para el argumento recursivo:

int total_factorial = 0:

3 Determinar una estructura de bucle. En C ++, por ejemplo, el bucle "while" funciona bien con iteraciones que tienen una longitud indeterminada. "Para" bucles, por el contrario, funcionan bien cuando un bucle irá por una duración estricta, representado por un número entero de algún tipo. Para el ejemplo del factorial, un bucle "for" funcionan bien:

int factorial = 5;
int total_factorial = 0;

4 Determinar las condiciones de acampada. Por lo general, como en el ejemplo factorial, la recursión terminará cuando se cumple una condición. En un bucle interative, tales como el bucle, es muy útil saber de antemano. Puesto que usted sabe que en encontrar el factorial de un número "n" que va a recorrer n-1 veces (excepto el cero), puede empezar en uno y se extenderán hasta el número factorial:

for (int i = 1; i <= factorial; i ++) {
si (i == 1) {
total_factorial = 1;
} Else {
factorial total de * = i;
}
}