Contenido del curso

Estructuras de Datos y Funciones

Funciones recursivas en Go con Fibonacci

Resumen

Las funciones recursivas en Go permiten que una función se invoque a sí misma tantas veces como sea necesario, algo útil para resolver problemas matemáticos como el factorial o la secuencia de Fibonacci. Si estás aprendiendo Go y quieres dominar este patrón, aquí encontrarás cómo escribirlo, cuándo conviene usarlo y qué cuidados tener para evitar ciclos infinitos.

¿Qué es la recursividad y por qué importa en Go?

La recursividad ocurre cuando una función se llama a sí misma para resolver un problema dividiéndolo en pasos más pequeños. En Go, la sintaxis para lograrlo es sencilla, pero el reto está en el análisis previo: necesitas una condición de salida clara para que la ejecución no se vuelva infinita.

¿Qué pasa si una función recursiva no tiene condición de salida? Crea un ciclo infinito que satura la memoria RAM y el disco, agotando los recursos de la computadora. Por eso siempre debes definir un caso base que detenga las llamadas.

Este patrón se vuelve interesante porque tú mandas llamar la función una sola vez desde main, y ella se encarga de repetirse internamente las veces necesarias.

¿Cómo se programa un factorial recursivo en Go?

El factorial multiplica un número por todos sus predecesores hasta llegar a uno. Por ejemplo, 7! equivale a 7 * 6 * 5 * 4 * 3 * 2 * 1, y el resultado es 5040 [03:50].

La estructura del proyecto arranca creando una carpeta llamada recursividad y dentro un archivo main.go con el paquete fmt y la función main [01:50]. Antes de escribir el cuerpo de main, defines la función factorial que recibe un entero y devuelve otro entero.

La lógica recursiva sigue tres pasos:

  • Definir un caso base que detenga las llamadas cuando el número llegue a 1.
  • Multiplicar el número actual por el resultado de la función con el número anterior.
  • Devolver el valor acumulado al cierre de cada llamada.

Desde main la invocas con fmt.Println(factorial(7)) y, aunque el llamado es uno solo, la función se ejecuta internamente siete veces hasta agotar la secuencia [03:30].

¿Cómo verificar el resultado en la terminal?

Ubícate dentro de la carpeta recursividad y ejecuta go run main.go. La salida será 5040, confirmando que la multiplicación encadenada funcionó correctamente [03:50].

¿Cómo implementar la secuencia de Fibonacci con recursividad?

Fibonacci es la secuencia matemática más famosa para enseñar recursividad: cada número es la suma de los dos anteriores, comenzando en 0 y 1. En Go puedes resolverla asignando una función a una variable y dejando que se invoque a sí misma.

La estructura típica luce así:

  • Declaras una variable llamada Fibonacci que recibe una función con un parámetro numeroBase de tipo entero y retorna un entero [04:30].
  • Dentro de la función defines la condición: si n es menor a 2, retorna n directamente.
  • Si no, retorna Fibonacci(n-1) + Fibonacci(n-2), lo que dispara nuevas llamadas hasta llegar al caso base.

¿Qué número devuelve Fibonacci(7) en Go? Devuelve 13, que corresponde al séptimo dígito de la secuencia 0, 1, 1, 2, 3, 5, 8, 13 [05:30].

La diferencia con el factorial es que aquí se realizan dos llamadas recursivas por cada ejecución, lo que hace más visible cómo el árbol de llamadas crece rápidamente.

¿Cuándo conviene usar funciones recursivas en Go?

La recursividad brilla en problemas que se descomponen naturalmente en subproblemas idénticos: secuencias matemáticas, recorridos de árboles o cálculos donde el resultado depende de pasos anteriores. Sin embargo, también puedes resolver factorial o Fibonacci con un ciclo for, que suele consumir menos memoria.

Antes de escribir una función recursiva, hazte estas preguntas:

  • ¿Cuál es el caso base que detiene la recursión?
  • ¿Cómo se reduce el problema en cada llamada?
  • ¿El número de iteraciones es razonable para los recursos disponibles?

¿Cuál es el riesgo de usar mal la recursividad? Consume grandes cantidades de RAM y CPU si la función nunca termina, contradiciendo la filosofía de Go de aprovechar recursos eficientemente.

La sintaxis no es lo complicado: lo verdaderamente importante es el análisis previo y tener un objetivo claro. Una vez que entiendes el patrón, puedes practicar con otras secuencias matemáticas como números triangulares, potencias o el problema de las Torres de Hanói.

¿Qué función recursiva te gustaría implementar primero en Go? Comparte tu idea en los comentarios y cuéntanos cómo definiste tu caso base.