¿Cuál es la diferencia básica entre loop y recursividad en C?

Piensa en un problema de tamaño N,

En la recursividad, divide el problema en un tamaño más pequeño, digamos N / 2 y otro N / 2. Cada uno de los subproblemas N / 2 se divide en N / 4 y N / 4. Sigue dividiendo el problema hasta que ya no sea posible la subdivisión.

Esto funciona porque si, por ejemplo, divide el problema de tamaño N en 4 subproblemas de igual tamaño, entonces

N / 4 + N / 4 + N / 4 + N / 4 = 4N / 4 = N.

Ahora, todo lo que necesita es resolver cada uno de estos problemas más pequeños y dado que ya sabemos que combinar las 4 partes nos dará la solución al problema principal (solución del problema de tamaño N).

Para resolver un problema menor, llamamos a una función particular de forma recursiva.


El ciclo se usa para decidir cuántas veces debemos repetir un cálculo dados dos

condiciones,

  1. una condición inicial: así es como comienza un ciclo
  2. una condición de terminación: aquí es donde termina un bucle.

Entre estas dos condiciones, el bucle ejecuta la lógica de cálculo repetidamente.

En resumen, el bucle debe satisfacer el triple de Hoare ,

{P} C {Q}

P – Precondición

C – comando

Q – Postcondición

Puedes leer sobre Hoare triple en wiki – Hoare logic – Wikipedia

En realidad, el bucle y la recursividad suenan similares y sus trabajos también son un poco iguales. Pero en C loop se puede usar en cualquier tipo de programas básicos, pero la recursión solo se realiza en el tipo de función del programa (donde cierto programa se divide en dos o muchas piezas más pequeñas para mayor claridad).

El bucle en profundidad solo repite alguna parte del programa o alguna declaración o alguna operación hasta que se satisfaga la condición del bucle, pero en la recursión se repite todo el programa y, básicamente, la declaración de toma de decisiones se utiliza para verificar la condición de recursividad.

En la operación de bucle, aritmética y lógica, el proceso de entrada y salida puede repetirse dentro de él durante mucho tiempo, pero en la recursión solo se repite el proceso de pasar el valor, pero el valor puede ser diferente cada vez.

No podemos usar la recursión dentro del bucle, pero podemos usar el bucle en el tipo de programa de recursión.

Básicamente, el bucle en C se refiere a un conjunto de instrucciones que se ejecutan repetidamente, también llamado iteración.

por ejemplo, for es un bucle, mientras que es un bucle do-while es un bucle

mientras que la recursividad es simplemente una técnica de una función que se da a luz a sí misma (o que se llama a sí misma una y otra vez hasta que se cumpla alguna condición)

a continuación hay un código para imprimir números del 1 al 100 con iteración y recursividad.

  1. recursividad

#include
usando el espacio de nombres estándar;

vacío printn (int i)
{
si (i! = 1)
{
printn (i – 1);
cout << i << endl;
}
sino cout << i << endl;
}

int main ()
{
printn (100); // esto es con recursividad
devuelve 0;
}

2. usando loop (para loop)

#include
usando el espacio de nombres estándar;

int main ()
{
para (int i = 0; i <= 100; i ++)
cout << i << endl;

devuelve 0;
}

Tomemos el ejemplo de cortar manzanas.

Recursión: suponga que se le da el trabajo de cortar la misma manzana una y otra vez en dos mitades. Ahora que tiene dos medias manzanas, debe cortar cada mitad nuevamente en dos mitades. Esta vez tienes cuatro mitades. El proceso continúa hasta el caso base.
Aquí la función es el trabajo de cortar y el argumento es apple.

Bucle: ahora suponga que el trabajo es el mismo, pero debe aumentar el número de manzanas en uno en cada paso sucesivo hasta que el número de manzanas cumpla con el bloque condicional del bucle. En el primer paso, debes cortar una manzana en dos mitades. Luego, debes cortar dos manzanas cada una en dos mitades. Luego, tome 3 manzanas y haga lo mismo hasta la condición de terminación.
Espero que este ejemplo pueda ayudar.

Se dice que un conjunto de mensajes de estado están en un bucle si se ejecutan repetidamente. Las recursiones son un conjunto de declaraciones que se llaman a sí mismas repetidamente. En la perspectiva de la computadora, cada vez que se realiza una llamada recursiva, es como volver a dar a luz a la misma función.

Los bucles y las recursiones son equivalentes en muchos aspectos. Siempre puede traducir bucles a recursiones y viceversa.

Las funciones recursivas ocupan más espacio en la pila porque cada vez que se realiza una llamada recursiva, se crea una nueva instancia de la función . Es aconsejable usar las recursiones solo si siente que después de cada llamada recurativa, el problema en cuestión se volverá más simple y puede resolverse repitiendo el proceso. Por ejemplo, el problema de la torre de Hanoi.

Los bucles son más eficientes porque no hacen crecer la pila.

Los bucles son como la recursión, en realidad. Los bucles son como “haz esto hasta que esto ya no sea cierto”, mientras que la recursión es como “haz esta función completa hasta que yo diga que pares”. Observa lo similares que son. Uno trata de una función por completo, mientras que el otro trata de un acto de hacer algo (una función).

More Interesting

¿Cuál es un mejor enfoque al aprender algoritmos y estructuras de datos, primero la implementación o el primer análisis?

No soy bueno con los algoritmos y no puedo encontrar una solución hasta que alguien me lo diga. ¿Cómo puedo arreglar esto?

¿Puede un algoritmo descubrir macronutrientes a partir de una imagen?

¿Puedo usar mi algoritmo para ejecutar operaciones con Zerodha Kite Connect?

¿Cómo se puede implementar un algoritmo de ordenación rápida en el cálculo Lambda?

Dada una matriz con 100 elementos (números del 0 al 99), si saco un elemento aleatorio, ¿cómo encontrarías el que saqué? ¿Cómo resolvería esto si 1: la matriz está ordenada o 2: la matriz no está ordenada?

Cómo resolver un problema de puente colgante utilizando circuitos y dónde una persona puede cruzar el puente a la vez

Normalmente me canso después de resolver 2 - 3 problemas algorítmicos en Leet Code. ¿Qué debo hacer para resolver más problemas diariamente?

¿Cuál es el número más pequeño [matemática] N [/ matemática] tal que [matemática] N \ equiv 2 \ mod 3, [/ matemática] [matemática] N \ equiv 1 \ mod 5, [/ matemática] [matemática] N \ equiv 4 \ mod 7 [/ matemáticas]?

¿Cuál es el algoritmo detrás de las OTP (contraseñas de un solo uso)?

Cómo entender un algoritmo de búsqueda CSP

¿Cuál es el mejor curso de análisis de datos y algoritmos presentado con el lenguaje Python?

¿Cuál es el algoritmo euclidiano para encontrar GCD? ¿Es un algoritmo tan bueno en términos de rendimiento y análisis de tiempo de ejecución?

¿Existe un libro o sitio web que describa los problemas y luego le solicite la estructura de datos / algoritmos más apropiados necesarios para resolver el problema?

¿Hay alguna manera de girar a la izquierda / derecha una matriz binaria en menos de O (n) tiempo?