La recursión es un enfoque efectivo para disolver los problemas como las tareas complejas de cálculos matemáticos. Esto se hace distribuyendo la tarea en sub-tareas. Este proceso se realiza siguiendo la regla de división y conquistar. No es obligatorio usar siempre un proceso de recursión en su programa para la repetición. Cualquier problema que se resuelva a través de la recursión también puede resolverse a través de la iteración. Pero la función recursiva es más eficiente en la programación, ya que el código es muy corto y fácilmente comprensible mientras realiza la misma tarea. El proceso de recursión siempre se recomienda para problemas como la búsqueda y la clasificación, los recorridos de los árboles, etc.
Nota: El proceso de recursión debe tener una condición de terminación o una clase base. En el segundo caso, conducirá a ejecuciones infinitas como un bucle de iteraciones.
Sintaxis de la función recursiva (C ++)
La sintaxis básica de la función recursiva se da como:
void recurse ()
// Declaraciones)
recurse ();
El concepto es dividir un problema en muchos problemas más pequeños y luego agregar todas las condiciones base que pueden detener la recursión.
Condición base
En cualquier programa recursivo, la solución de un problema mayor se expresa en problemas más pequeños.
INT FACT (int n)
if (n < = 1) // base case
regresar 1;
demás
'Otra declaración'
La declaración/condición de 'n < =1' is defined here, and hence the larger value can be solved by converting to a smaller one until the condition of the base case is fulfilled. If we don't use a base condition in our program, then there will be no ending point specifying the code, the infinite execution will occur. Here we will use a sample example.
Función simple
Ahora considere una muestra de una función recursiva en la que tomamos un valor en el programa principal y luego la pasamos a la función. Dentro de una función, usamos una declaración if-else. La parte 'if' de la declaración se refiere a la condición base para terminar la función o limitar la salida. Esto se aplicará cuando el valor sea inferior a 1.
If (val < 1)
Mientras que la característica principal se aplica en la parte 'más' de la función. Esta es la función recursiva.
# Función (val - 1)
El valor se muestra antes y después de esta declaración, por lo que la salida contendrá los números en orden descendente y en orden ascendente. La ejecución del código se realiza a través de un compilador G ++. '-o' se usa para guardar la salida de un código fuente en un archivo de salida.
$ G ++ -O R1 R1.C
ps ./R1
Ahora, queremos ver el efecto de la condición base en este programa. Veremos el valor resultante; Si eliminamos la declaración if-else del mismo programa que se describe anteriormente, ¿cuál será la salida?.
Puede ver que el resto del código no cambia después de eliminar la declaración condicional. Después de eliminar la instrucción base, la salida se verá como la imagen a continuación. No habrá un punto final definido para esta ejecución. Puede notar que la salida es un tipo infinito de un solo número.
Esta misma salida dura muchas líneas hasta que se muestra un mensaje de volcado de núcleo.
Trabajo de recursión
Supongamos que un programador está dispuesto a determinar la suma de los primeros N. Entonces la función se verá así:
F (n) = 1+2+3+4+5+...+n
El ejemplo anterior es la simple adición de los números. El segundo enfoque se ocupa del uso de una función recursiva.
F (n) = 1 n = 1
F (n) = n + f (n-1) n> 1
Ahora puedes señalar la diferencia entre ambos enfoques. En el segundo enfoque, f () es una diferencia básica, como se llama en sí misma.
La recursión es de dos tipos. Uno es la recursión directa. El segundo es una recursión indirecta. Una función se llama indirecta recursiva si tiene una llamada de función para otra función y que otra función llama a la primera función directa o indirectamente. Se ilustra una muestra para la recursión directa como:
Int f (int n)
F (n);
// algún código
Mientras que una muestra para la recursión indirecta se representa como:
vacío F (int n)
f1 ();
void f1 (int n)
F();
devolver;
Ahora explicaremos ambos tipos de funciones recursivas a través de algunos ejemplos básicos.
Recursión directa
Ejemplo 1
Este ejemplo trata sobre el cálculo de la serie Fibonacci. Nuevamente, el concepto es el mismo; Aquí se usa una declaración condicional para detener la condición; El valor debe ser igual a cero. De lo contrario, si el valor es igual a 1 o 2, devolverá 1. Como esta formación de series necesita 2 números, el número utilizado en el programa principal debe ser mayor que 2. La fórmula de la declaración para el Fibonacci está escrita en el arte 'Else' de la condición. Esta es principalmente la recursión del programa.
# Función (val - 1) + función (val - 2))
Mientras que la función principal iniciará la llamada funcional sin pasar por el valor. Este valor es un número hasta el que debe ser la salida. La salida se puede verificar a través del terminal de Linux por un compilador G ++.
Ejemplo 2
Este ejemplo trata con el cálculo factorial de un número. Para este cálculo, un número debe ser mayor que 1, por lo que aquí hemos aplicado una condición base; Si esta parte de la declaración 'si' se cumple, entonces el programa será finalizado; de lo contrario, la operación matemática se aplica al número.
Val * función (val - 1)
Esta es la función de recursión, en la que la respuesta de la función se utiliza nuevamente en la llamada de función.
El valor resultante se muestra a continuación.
Recursión indirecta
Aplicaremos el mismo cálculo de factorial indirectamente. Como hemos descrito anteriormente, que en la recursión indirecta, las funciones no lo llaman, por lo que necesitamos otra función para este propósito. Tome un ejemplo que tenga dos funciones. En la función A, la función de recursión se declara de la misma manera que en el ejemplo anterior, pero la llamada de función es para la segunda función, Función-B. La función B contiene el mismo método de cálculo, y contiene la llamada recursiva para la función A.
En el programa principal, se realiza una llamada de función a la función A.
Cuando ve la salida, notará que la respuesta para ambos métodos de recursión es la misma, pero solo la diferencia está en el enfoque utilizado.
Conclusión
La 'función recursiva de C ++' tiene muchas ventajas, ya que se usa en los procesos de búsqueda y clasificación. La condición base tiene el papel principal en la ejecución de la recursión, ya que limita la salida y la ejecución infinita. Los ejemplos comúnmente utilizados se explican aquí para proporcionar la comprensión del usuario de la recursión.