Un concepto poco utilizado en C es la función de repetición . Una función recursiva es simplemente una función que se llama . Las funciones recursivas pueden ser útiles en ciertas funciones , pero por lo general pueden ser reemplazados mediante el uso de un bucle . Propósito de la función recursiva
Una función recursiva puede ser utilizado cuando una operación se debe realizar repetidamente en un conjunto de datos . Por ejemplo , una función recursiva puede realizar varias veces una operación matemática en un valor numérico hasta que se cumpla una condición.
Crear una función recursiva
Cualquier función que se llama a sí mismo es una función recursiva . No hay requisitos especiales para una función para llamar a sí mismo, puede hacerlo como Cait llamaría cualquier otra función. A modo de ejemplo , la siguiente es una función recursiva para calcular el siguiente número en la secuencia Fibonacci :
largo fib ( n tiempo )
{ if ( n < = 2 )
{ return 1 ; }
más
{
regreso fib ( n - 1 ) + fib (n - 2 ) ;
}
}
Problemas con recursividad
recursividad tiene varios posibles problemas que deben ser considerados antes de escribir una función recursiva . Funciones recursivas pueden ser muy ineficiente , no sólo hay una sobrecarga de pila de llamar repetidamente a la función , las funciones recursivas pueden acabar fácilmente con tiempos de funcionamiento exponencial en función de la forma en que están escritas . Funciones recursivas también corren el riesgo de causar un desbordamiento de pila si el número de llamadas recursivas es demasiado alto.
Recursividad Vs . Iteración
mayoría de las funciones recursivas se pueden implementar como una función no recursiva que utiliza un bucle iterativo. Esto tiende a ser más eficiente y más seguro, pero en algunos casos puede ser más difícil de escribir y de leer.
Funciones recursivas son los más utilizados en la navegación de una estructura de árbol , o cuando se utiliza la iteración haría que el funcionar mucho más complejo. En la mayoría de los casos , la iteración se debe utilizar en su lugar.