34. Relaciones de recurrencia

Una relación de recurrencia expresa cada término de una sucesión en función de los anteriores. Junto con condiciones iniciales, define de forma compacta sucesiones que no siguen necesariamente un patrón aritmético o geométrico simple.

34.1 Introducción

En el tema anterior vimos sucesiones con reglas explícitas sencillas (progresiones aritméticas y geométricas). Sin embargo, muchas sucesiones en matemáticas discretas y ciencias de la computación se definen de manera **recursiva**: cada valor depende de uno o más valores previos.

Una **relación de recurrencia** es la ecuación que formaliza esa dependencia. Es el puente entre las funciones recursivas (tema 32), las sucesiones (tema 33) y los algoritmos que calculan términos paso a paso.

34.2 Definición Formal

Una relación de recurrencia para la sucesión { aₙ } es una ecuación que expresa aₙ en términos de términos anteriores:

aₙ = F(aₙ₋₁, aₙ₋₂, …, aₙ₋ₖ) para n > n₀

La función F determina cómo se combinan los términos previos. El entero k es el **orden** de la recurrencia: indica cuántos términos anteriores intervienen directamente. Cuanto mayor es el orden, más información inicial se necesita para generar la sucesión.

34.3 Condiciones Iniciales

La relación de recurrencia por sí sola no determina una única sucesión. Es necesario fijar los **valores iniciales** de los primeros términos para que la regla pueda aplicarse:

Recurrencia de orden 1 → se necesita 1 condición inicial (p. ej. a₁) Recurrencia de orden 2 → se necesitan 2 condiciones (p. ej. a₁ y a₂) Recurrencia de orden k → se necesitan k condiciones iniciales

Sin condiciones iniciales, la ecuación admite infinitas sucesiones posibles. Con ellas, cada término queda univocamente determinado.

34.4 Ejemplos Clásicos

Orden 1 — Progresión aritmética como recurrencia:

aₙ = aₙ₋₁ + d, con a₁ dado Ejemplo: a₁ = 5, d = 3 → 5, 8, 11, 14, 17, …

Orden 1 — Progresión geométrica como recurrencia:

aₙ = r · aₙ₋₁, con a₁ dado Ejemplo: a₁ = 2, r = 3 → 2, 6, 18, 54, …

Orden 2 — Sucesión de Fibonacci:

aₙ = aₙ₋₁ + aₙ₋₂, con a₁ = 1, a₂ = 1 Términos: 1, 1, 2, 3, 5, 8, 13, …

Orden 1 no homogénea:

aₙ = 2 · aₙ₋₁ + 1, con a₁ = 1 Términos: 1, 3, 7, 15, 31, …

34.5 Simulador: Generación Término a Término

El simulador construye la sucesión aplicando la relación de recurrencia paso a paso. Observa cómo cada nuevo término (resaltado en azul) se calcula a partir de los términos previos (conectados con flechas). Las condiciones iniciales aparecen en verde porque no requieren aplicar la recurrencia.

Constructor de Sucesiones Recursivas Término 1 / 7
Condición inicial: a₁ = 5. Pulsa "Siguiente Término" para aplicar aₙ = aₙ₋₁ + 3.

34.6 Relaciones de Recurrencia en Programación

Implementar una relación de recurrencia en código equivale a calcular cada término usando los anteriores, ya sea con un bucle iterativo (almacenando los valores previos) o con una función recursiva.

// Fibonacci iterativo (orden 2)
function fibonacciIterativo(n) {
  if (n <= 0) return 0;
  if (n === 1) return 1;
  let aPrev2 = 1; // a_1
  let aPrev1 = 1; // a_2
  for (let i = 3; i <= n; i++) {
    const actual = aPrev1 + aPrev2;
    aPrev2 = aPrev1;
    aPrev1 = actual;
  }
  return aPrev1;
}

// Recurrencia general con arreglo de términos
function generarSucesion(iniciales, recurrencia, cantidad) {
  const terminos = [...iniciales];
  while (terminos.length < cantidad) {
    terminos.push(recurrencia(terminos));
  }
  return terminos;
}

const aritmetica = generarSucesion(
  [5],
  (prev) => prev[prev.length - 1] + 3,
  6
);

const fib = generarSucesion(
  [1, 1],
  (prev) => prev[prev.length - 1] + prev[prev.length - 2],
  8
);

console.log("Aritmética:", aritmetica);
// Aritmética: [5, 8, 11, 14, 17, 20]

console.log("Fibonacci:", fib);
// Fibonacci: [1, 1, 2, 3, 5, 8, 13, 21]

console.log("fibonacciIterativo(10) =", fibonacciIterativo(10));
// fibonacciIterativo(10) = 55

34.7 Errores Comunes

  • Condiciones iniciales insuficientes: Una recurrencia de orden 2 necesita dos valores iniciales. Con solo a₁ definido, la sucesión no queda determinada.
  • Confundir orden con número de términos: El orden es cuántos términos previos intervienen en la fórmula, no cuántos términos queremos calcular.
  • Aplicar la recurrencia antes de tiempo: No se puede calcular a₂ con aₙ = aₙ₋₁ + aₙ₋₂ si solo se conocen condiciones para n = 1.
  • Índices inconsistentes: Mezclar notación que empieza en a₀ con código que usa arr[0] para a₁ genera errores de desplazamiento en una posición.

34.8 Qué debes recordar de este tema

  • Una relación de recurrencia define aₙ a partir de términos anteriores.
  • El **orden** indica cuántos términos previos intervienen en la ecuación.
  • Las **condiciones iniciales** son indispensables para fijar una única sucesión.
  • Las progresiones aritméticas y geométricas son recurrencias de orden 1 particulares.
  • Fibonacci es el ejemplo canónico de recurrencia de **orden 2**.

34.9 Conclusión

Las relaciones de recurrencia permiten describir sucesiones complejas con reglas compactas. Aparecen en el análisis de algoritmos (como las recurrencias de divide y vencerás), en combinatoria y en modelos de crecimiento poblacional discreto.

Definir la recurrencia es solo el primer paso. En el próximo tema estudiaremos la **resolución básica de recurrencias**, aprendiendo técnicas para obtener fórmulas cerradas que calculen aₙ directamente sin generar todos los términos intermedios.