¿El uso de una función recursiva en el código aumenta mucho el tiempo de ejecución?

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.

// 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.

Las funciones recursivas toman gastos generales mediante el almacenamiento de instrucciones en el contador del programa; Eventualmente puede agotar la memoria y puede llevar a un punto muerto y colgar el programa en ejecución. El uso de la escisión mutua sobre los recursos adquiridos es la única forma de conquistar la afirmación mientras el programa se ejecuta sobre funciones recursivas continuas .