C Recursión

La recursión se refiere al método de usar la propia función dentro de la definición de una función.

Por ejemplo:
Había una vez una montaña, y en la montaña había un templo, y en el templo había un monje anciano que le contaba una historia al monje joven. ¿Cuál era la historia? «Había una vez una montaña, y en la montaña había un templo, y en el templo había un monje anciano que le contaba una historia al monje joven. ¿Cuál era la historia? "Había una vez una montaña, y en la montaña había un templo, y en el templo había un monje anciano que le contaba una historia al monje joven. ¿Cuál era la historia? …"»

El formato de sintaxis es el siguiente:

void recursion() { statements; ... ... ... recursion(); /*La función se llama a sí misma*/ ... ... ... } int main() { recursion(); }

Diagrama de flujo:

El lenguaje C admite la recursión, es decir, una función puede llamarse a sí misma. Sin embargo, al usar la recursión, el programador debe definir una condición para salir de la función; de lo contrario, entrará en un bucle infinito.

Las funciones recursivas desempeñan un papel crucial en la resolución de muchos problemas matemáticos, como calcular el factorial de un número, generar la sucesión de Fibonacci, etc.

Factorial de un número

El siguiente ejemplo usa una función recursiva para calcular el factorial de un número dado:

Ejemplo

#include <stdio.h> double factorial(unsigned int i) { if(i <= 1) { return 1; } return i * factorial(i - 1); } int main() { int i = 15; printf("El factorial de %d es %f\n", i, factorial(i)); return 0; }

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

15 的阶乘为 1307674368000.000000

Sucesión de Fibonacci

El siguiente ejemplo usa una función recursiva para generar la sucesión de Fibonacci de un número dado:

Ejemplo

#include <stdio.h> int fibonaci(int i) { if(i == 0) { return 0; } if(i == 1) { return 1; } return fibonaci(i-1) + fibonaci(i-2); } int main() { int i; for (i = 0; i < 10; i++) { printf("%d\t\n", fibonaci(i)); } return 0; }

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

0    
1    
1    
2    
3    
5    
8    
13    
21    
34
Otras extensiones