El ejemplo clásico de calcular una recursión es factorial.
// factorial with the help of recursion
int recursive_factorial(int n)
{
if (n <= 1) return 1;
return n * recursive_factorial(n - 1);
}
Sin embargo, el factorial también se puede calcular con la ayuda de la iteración.
- Preguntado por un no experto en tecnología, ¿qué tan impactante sería si una tecnología pudiera mitigar el ruido impulsivo en tiempo real usando un algoritmo no lineal simple que usa la mediana (en lugar de la media)? Por ejemplo, podría usarse para reemplazar filtros lineales analógicos en teléfonos móviles, esencialmente actuando como un filtro lineal a menos que detecte ruido impulsivo y actúe para condicionarlo.
- ¿Por qué mi código JavaScript muestra un error de bucle infinito en la línea 7? ¿Por qué no está eliminando los elementos de la matriz de entrada?
- ¿Cuáles son todos los algoritmos que debe saber para funcionar bien en Codeforces?
- ¿Cómo explica la localidad de caché el hecho de que la ordenación rápida suele ser más rápida que la ordenación por fusión?
- ¿Se puede ordenar una lista de números en un número menor de pases que el indicado por la notación Big-O?
// factorial with the help of iteration
int itreative_factorial(int n)
{
int sum = 1;
if (n <= 1) {
return sum;
}
while (n > 1) {
sum *= n;
n--;
}
return sum;
}
La recursión implica llamar una versión más simple de la función una y otra vez hasta que se cumpla la condición base. Cada instancia de la llamada a la función se almacena en la pila, lo que permite realizar el cálculo total. El almacenamiento de cada instancia cuesta algo de memoria, lo que lo hace susceptible a StackOverflow. Debido al constante push-pop de los registros, la recursividad es más lenta.
Si puede, intente utilizar la programación dinámica -> Memoization para obtener mejores resultados.
Ahora, esto no quiere decir que siempre debe usar la iteración sobre la recursividad, pero cuando se trata de números muy grandes, debe evitarse. Sin embargo, a veces no es posible utilizar la iteración como en el caso de la función de Ackermann, por lo que debe elegir con prudencia.
Básicamente, la recursión es lenta en comparación con la iteración y está vinculada a StackOverflow, por lo tanto, intente usar la iteración en caso de tiempos de ejecución aumentados.