Recomendado, 2023

La Elección Del Editor

Diferencia entre recursividad e iteración

La recursión y la iteración ejecutan repetidamente el conjunto de instrucciones. La recursión es cuando una declaración en una función se llama a sí misma repetidamente. La iteración es cuando un bucle se ejecuta repetidamente hasta que la condición de control se vuelve falsa. La principal diferencia entre la recursión y la iteración es que una recursión es un proceso, siempre aplicado a una función. La iteración se aplica al conjunto de instrucciones que queremos ejecutar repetidamente.

Gráfica comparativa

Base para la comparaciónRecursionIteración
BASICLa declaración en un cuerpo de función llama a la función en sí misma.Permite que el conjunto de instrucciones se ejecute repetidamente.
FormatoEn la función recursiva, solo se especifica la condición de terminación (caso base).La iteración incluye la inicialización, la condición, la ejecución de la sentencia dentro del bucle y la actualización (incrementa y disminuye) la variable de control.
TerminaciónSe incluye una declaración condicional en el cuerpo de la función para forzar a la función a regresar sin que se ejecute la llamada de recursión.La instrucción de iteración se ejecuta repetidamente hasta que se alcanza una cierta condición.
CondiciónSi la función no converge a alguna condición llamada (caso base), conduce a una recursión infinita.Si la condición de control en la instrucción de iteración nunca se vuelve falsa, conduce a una iteración infinita.
Repetición infinitaLa recursión infinita puede estrellar el sistema.Bucle infinito utiliza ciclos de CPU repetidamente.
AplicadoLa recursión siempre se aplica a las funciones.La iteración se aplica a las declaraciones de iteración o "bucles".
ApilarLa pila se utiliza para almacenar el conjunto de nuevas variables y parámetros locales cada vez que se llama a la función.No utiliza pila.
Gastos generalesLa recursión posee la sobrecarga de llamadas a funciones repetidas.No hay sobrecarga de llamada de función repetida.
VelocidadLento en la ejecución.Rápido en la ejecución.
Tamaño del CódigoLa recursión reduce el tamaño del código.La iteración hace que el código sea más largo.

Definición de Recursión

C ++ permite que una función se llame a sí misma dentro de su código. Eso significa que la definición de la función posee una función llamada a sí misma. A veces también se le llama “ definición circular ”. El conjunto de variables y parámetros locales utilizados por la función se crean cada vez que la función se llama a sí misma y se almacenan en la parte superior de la pila. Pero, cada vez que una función se llama a sí misma, no crea una nueva copia de esa función. La función recursiva no reduce significativamente el tamaño del código y ni siquiera mejora la utilización de la memoria, pero sí lo hace en comparación con la iteración.

Para terminar la recursión, debe incluir una declaración de selección en la definición de la función para forzar a la función a regresar sin darse una llamada recursiva a sí misma. La ausencia de la instrucción de selección en la definición de una función recursiva permitirá a la función en recursión infinita una vez llamada.

Entendamos la recursión con una función que devolverá el factorial del número.

 int factorial (int num) {int respuesta; if (num == 1) {return 1; } else {answer = factorial (num-1) * num; // llamada recursiva} return (respuesta); } 

En el código anterior, la instrucción en la parte else muestra la recursión, ya que la instrucción llama a la función factorial () en la que reside.

Definición de iteración

La iteración es un proceso de ejecución repetida del conjunto de instrucciones hasta que la condición en la instrucción de iteración se vuelve falsa. La declaración de iteración incluye la inicialización, comparación, ejecución de las declaraciones dentro de la declaración de iteración y, finalmente, la actualización de la variable de control. Una vez que la variable de control se actualiza, se compara de nuevo, y el proceso se repite, hasta que la condición en la instrucción de iteración resulta ser falsa. Las declaraciones de iteración son "for" loop, "while" loop, "do-while" loop.

La instrucción de iteración no usa una pila para almacenar las variables. Por lo tanto, la ejecución de la instrucción de iteración es más rápida en comparación con la función recursiva. Incluso la función de iteración no tiene la sobrecarga de llamadas repetidas a funciones, lo que también hace que su ejecución sea más rápida que la función recursiva. La iteración se termina cuando la condición de control se vuelve falsa. La ausencia de una condición de control en la instrucción de iteración puede dar lugar a un bucle infinito, o puede causar un error de compilación.

Vamos a entender la iteración con respecto al ejemplo anterior.

 int factorial (int num) {int answer = 1; // necesita inicialización porque puede contener un valor de basura antes de su inicialización para (int t = 1; t> num; t ++) // iteración {answer = answer * (t); retorno (respuesta); }} 

En el código anterior, la función devuelve el factorial del número utilizando la instrucción de iteración.

Diferencias clave entre recursión e iteración

  1. La recursión es cuando un método en un programa se llama a sí mismo repetidamente, mientras que la iteración es cuando un conjunto de instrucciones en un programa se ejecutan repetidamente.
  2. Un método recursivo contiene un conjunto de instrucciones, una declaración que se llama a sí mismo y una condición de terminación, mientras que las instrucciones de iteración contienen inicialización, incremento, condición, conjunto de instrucciones dentro de un bucle y una variable de control.
  3. Una declaración condicional decide la terminación de la recursión y el valor de la variable de control decide la terminación de la instrucción de iteración.
  4. Si el método no lleva a la condición de terminación, entra en recursión infinita. Por otro lado, si la variable de control nunca conduce al valor de terminación, la instrucción de iteración se repite infinitamente.
  5. La recursión infinita puede provocar un bloqueo del sistema, mientras que la iteración infinita consume ciclos de CPU.
  6. La recursión siempre se aplica al método, mientras que la iteración se aplica al conjunto de instrucciones.
  7. Las variables creadas durante la recursión se almacenan en la pila, mientras que la iteración no requiere una pila.
  8. La recursión provoca la sobrecarga de la función repetida de llamada, mientras que la iteración no tiene una función de sobrecarga de llamada.
  9. Debido a la función de sobrecarga de llamada, la ejecución de la recursión es más lenta, mientras que la ejecución de la iteración es más rápida.
  10. La recursión reduce el tamaño del código, mientras que las iteraciones hacen que un código sea más largo.

Conclusión:

La función recursiva es fácil de escribir, pero no tienen un buen rendimiento en comparación con la iteración, mientras que la iteración es difícil de escribir, pero su rendimiento es bueno en comparación con la recursión.

Top