35. Crecimiento exponencial

El crecimiento exponencial ocurre cuando una cantidad se multiplica por un factor mayor que 1 en cada paso. Al principio puede parecer lento, pero luego crece muy rápido.

35.1 Introducción

El crecimiento exponencial aparece cuando el aumento depende del valor actual. En lugar de sumar siempre la misma cantidad, multiplicamos por un factor constante.

Este comportamiento aparece en interés compuesto, crecimiento de poblaciones, expansión de usuarios, progresión de dificultad y cualquier proceso que crece por porcentaje.

35.2 Fórmula general

Una forma común de escribir crecimiento exponencial es:

f(t) = valorInicial · factorᵗ

Si el factor es mayor que 1, la función crece.

35.3 Crecimiento por porcentaje

Si una cantidad crece un porcentaje fijo en cada período, el factor se calcula como:

factor = 1 + porcentaje

Por ejemplo, un crecimiento del 20% tiene factor 1.2.

Porcentaje Factor Interpretación
5% 1.05 Se conserva el 100% y se agrega 5%
20% 1.20 Se conserva el 100% y se agrega 20%
100% 2.00 El valor se duplica

35.4 Ejemplo básico

Si empezamos con 100 y crecemos un 20% por período:

f(t) = 100 · 1.2ᵗ
t f(t)
0 100
1 120
2 144
3 172.8

El aumento absoluto crece: primero aumenta 20, luego 24, luego 28.8.

35.5 Crecimiento exponencial en JavaScript

Podemos implementar la fórmula directamente.

function crecimiento(valorInicial, porcentaje, periodos) {
  const factor = 1 + porcentaje;
  return valorInicial * factor ** periodos;
}

console.log(crecimiento(100, 0.2, 0));
console.log(crecimiento(100, 0.2, 1));
console.log(crecimiento(100, 0.2, 3));

35.6 Generar tabla de crecimiento

Para observar el crecimiento período por período podemos generar una tabla.

function tablaCrecimiento(valorInicial, porcentaje, periodos) {
  const factor = 1 + porcentaje;
  const tabla = [];

  for (let t = 0; t <= periodos; t++) {
    tabla.push({
      periodo: t,
      valor: valorInicial * factor ** t
    });
  }

  return tabla;
}

console.log(tablaCrecimiento(100, 0.2, 5));

35.7 Comparación con crecimiento lineal

El crecimiento lineal suma una cantidad constante. El crecimiento exponencial multiplica por un factor constante.

function comparar(periodos) {
  const filas = [];

  for (let t = 0; t <= periodos; t++) {
    filas.push({
      periodo: t,
      lineal: 100 + 20 * t,
      exponencial: 100 * 1.2 ** t
    });
  }

  return filas;
}

console.log(comparar(8));

Al comienzo los valores pueden parecer cercanos, pero con el tiempo la diferencia aumenta.

35.8 Duplicación

Cuando el factor es 2, el valor se duplica en cada período.

f(t) = valorInicial · 2ᵗ

Esto genera crecimiento muy rápido.

function duplicacion(valorInicial, periodos) {
  return valorInicial * 2 ** periodos;
}

for (let t = 0; t <= 10; t++) {
  console.log(t, duplicacion(1, t));
}

35.9 Tiempo de duplicación aproximado

Si una cantidad crece a una tasa porcentual constante, podemos estimar cuántos períodos necesita para duplicarse.

tiempoDuplicación ≈ 70 / porcentaje

Esta regla usa el porcentaje escrito como número entero. Por ejemplo, para 10%, el tiempo de duplicación aproximado es 70 / 10 = 7 períodos.

function tiempoDuplicacionAproximado(porcentajeEntero) {
  return 70 / porcentajeEntero;
}

console.log(tiempoDuplicacionAproximado(10));
console.log(tiempoDuplicacionAproximado(5));

35.10 Interés compuesto

El interés compuesto es crecimiento exponencial porque cada período se calcula sobre el monto acumulado.

monto = capital · (1 + tasa)ᵗ
function montoCompuesto(capital, tasa, anios) {
  return capital * (1 + tasa) ** anios;
}

console.log(montoCompuesto(1000, 0.08, 1));
console.log(montoCompuesto(1000, 0.08, 10));

35.11 Crecimiento de usuarios

Una aplicación puede crecer por porcentaje mensual. Aunque el porcentaje sea constante, el aumento absoluto se vuelve cada vez mayor.

function usuariosEstimados(iniciales, crecimientoMensual, meses) {
  return Math.round(iniciales * (1 + crecimientoMensual) ** meses);
}

console.log(usuariosEstimados(1000, 0.15, 1));
console.log(usuariosEstimados(1000, 0.15, 6));
console.log(usuariosEstimados(1000, 0.15, 12));

35.12 Progresión de dificultad

En videojuegos, el crecimiento exponencial puede usarse con cuidado para aumentar recompensas, costos o dificultad.

function costoMejora(nivel) {
  const costoBase = 100;
  const factor = 1.25;

  return Math.round(costoBase * factor ** (nivel - 1));
}

for (let nivel = 1; nivel <= 8; nivel++) {
  console.log(nivel, costoMejora(nivel));
}

Factores demasiado grandes pueden volver el sistema difícil de equilibrar.

35.13 Controlar crecimiento excesivo

En software, a veces conviene limitar un crecimiento exponencial para evitar valores demasiado grandes.

function crecimientoLimitado(valorInicial, factor, periodos, maximo) {
  const valor = valorInicial * factor ** periodos;
  return Math.min(valor, maximo);
}

console.log(crecimientoLimitado(100, 1.5, 5, 1000));
console.log(crecimientoLimitado(100, 1.5, 10, 1000));

35.14 Señales de crecimiento exponencial

Señal Interpretación
El aumento es porcentual Conviene pensar en factor multiplicativo
El valor se duplica cada cierto tiempo Es un patrón exponencial
El aumento absoluto crece El ritmo no es lineal
El valor actual afecta el aumento siguiente El crecimiento depende del acumulado

35.15 Aplicaciones en programación

  • Estimaciones de usuarios o tráfico.
  • Cálculo de interés compuesto.
  • Costos crecientes de mejoras o niveles.
  • Simulaciones de expansión o reproducción.
  • Modelos que crecen por porcentaje.

35.16 Errores comunes

  • Usar una suma fija cuando el problema crece por porcentaje.
  • Confundir 20% con factor 20; el factor correcto es 1.2.
  • No controlar valores que crecen demasiado rápido.
  • Elegir factores muy altos en sistemas de progresión.
  • Suponer que el crecimiento exponencial siempre es razonable a largo plazo.

35.17 Qué debes recordar de este tema

  • El crecimiento exponencial multiplica por un factor mayor que 1.
  • Un crecimiento del p% usa el factor 1 + p, con p escrito en forma decimal.
  • El aumento absoluto se vuelve cada vez mayor.
  • La duplicación es un caso especial con factor 2.
  • El interés compuesto es crecimiento exponencial.
  • En programación conviene controlar el crecimiento para evitar valores extremos.

35.18 Conclusión

El crecimiento exponencial describe procesos donde el valor se multiplica por un factor constante. Es poderoso, pero también puede producir valores enormes en pocos pasos.

En el próximo tema veremos el caso contrario: decaimiento exponencial, donde la cantidad se reduce por un factor constante.