jueves, 28 de mayo de 2026

Funciones definidas para tipos de números (3)

 Esta entrada cierra el estudio de funciones definidas para ciertos tipos de números, así como de sus funciones inversas. En esta tercera se estudiarán las definidas por recurrencia.

Funciones sobre recurrencias

 

Son aquellas que se definen mediante los términos iniciales, y además, expresan a(n+1) en función de los anteriores términos. Por ejemplo, la sucesión de Fibonacci se define como a(1)=1, a(2)=1, y para el resto, a(n+1)=a(n)+a(n-1). Si esta última relación sólo usa el término a(n) se llama de primer orden, y así, se pueden plantear de segundo, tercero o más órdenes.

 

Recurrencias de primer orden

 

Cada función de este tipo deberá estar definida por dos parámetros, a(1) y otro según la definición, que puede ser DIFERENCIA en las progresiones aritméticas, RAZÓN en las geométricas, o bien cualquier otra relación entre a(n+1) y a(n). No existen ejemplos populares concretos para definir funciones.

 

Recurrencias de segundo orden

 

Existen muchas recurrencias de segundo orden, como la ya citada de Fibonacci. Las más simples son las llamadas Horadam, y se caracterizan porque la relación de recurrencia es lineal. Vemos las más importantes.

 

Caso particular: sucesiones Horadam

 

Son aquellas que están definidas por cuatro parámetros, a1, a2, c1 y c2, de la forma a(1) = a1, a(2) =a2, a(n) = a(n-2)*c1+a(n*1)*c2. Así, tenemos muchos ejemplos concretos de este tipo de sucesiones recurrentes de segundo grado:

 

Horadam(1,1,1,1): Números de Fibonacci: 1, 1, 2, 3, 5

Horadam(2,1,1,1): Números de Lucas: 2, 1, 3, 4, 7, 11, 18, 29, 47, …

Horadam(1,2,1,2): Potencias de 2:1, 2, 4, 8, 16, 32, …

Horadam(0,1,2,1): Números de Pell: 0, 1, 2, 5, 12, 29, 70, …

Horadam(1,1,2,1): Números de Pell-Lucas: 1, 1, 3, 7, 17, 41, 99, …

Horadam(2,3,3,-2): Sucesión de Pisot (2n+1): 2, 3, 5, 9, 17, 33, …

Horadam(0,1,1,2): Sucesión de Jacobsthal: 2, 3, 5, 9, 17, 33, …

 

Son muy sencillas de programar, y su búsqueda suele ser rápida. Para encontrar un término general hay que usar los cuatro parámetros citados más el número de orden n.

  

En lenguaje PARI

 

horadam(n,a1, a2, c1, c2) = {my(i,f,t,v,u); if(n==1,f=a1); if(n==2,f=a2);if(n>2,v=a1;t=a2;for(i=3,n,u=c1*t+c2*v;v=t;t=u);f=u);f}

 

En Vbasic

 

Function horadam(n, a1, a2, c1, c2)

Dim i, f, v, u

If n = 1 Then horadam = a1: Exit Function

If n = 2 Then horadam = a2: Exit Function

v = a1: t = a2

For i = 3 To n

u = c1 * t + c2 * v: v = t: t = u

Next i

horadam = u

End Function

 

Si se dispone de estas dos funciones, podemos definir las funciones FIBONACCI(N), PELL(N), LUCAS(N) y demás, igualando su definición a la de Horadam. Por ejemplo, LUCAS(N) se definirá así:

 

Lucas(n)=horadam(n, 2,1,1,1)

 

Así tendremos que lucas(10)=horadam(10,2,1,1,1)=76, como puedes ver en cualquier descripción de estos números. Imagina que puedes definir así todas estas sucesiones.

El autor lleva años usando FIBONACCI(N) en sus cálculos.

 

La función ORDEN se puede construir de similar a la que usamos para Primos o capicúas. Puede ser esta:

 

Function eshoradam(n, a1, a2, c1, c2) As Long

Dim v, u, k, t As Long

Dim es As Long

 

If n = a1 Then eshoradam = 1: Exit Function

If n = a2 Then eshoradam = 2: Exit Function

v = a1: t = a2: k = 2

While t <= n

If t = n Then

es = k

ElseIf t > n Then

es = 0

End If

u = c1 * t + c2 * v: v = t: t = u: k = k + 1

Wend

eshoradam = es

End Function

 

Nos devuelve el orden k si es un término de la sucesión, o un cero si no lo es.

 

El autor usa en su hoja de cálculos diarios esta versión, que le permite averiguar si un número dado es de uno de los tipos populares de esta sección:

 

Function estipohoradam$(n)

Dim s$

Dim es As Long

s = ""

es = eshoradam(n, 1, 1, 1, 1): If es <> 0 Then s = s + " Fibonacci " + " & " + ajusta(es)

es = eshoradam(n, 2, 1, 1, 1): If es <> 0 Then s = s + " Lucas " + " & " + ajusta(es)

es = eshoradam(n, 0, 1, 2, 1): If es <> 0 Then s = s + " Pell " + " & " + ajusta(es)

es = eshoradam(n, 1, 1, 2, 1): If es <> 0 Then s = s + " Pell-Lucas " + " & " + ajusta(es)

es = eshoradam(n, 2, 3, 3, -2): If es <> 0 Then s = s + " Pisot " + " & " + ajusta(es)

es = eshoradam(n, 0, 1, 1, 2): If es <> 0 Then s = s + " Jacobsthal " + " & " + ajusta(es)

es = eshoradam(n, 2, 1, 1, 2): If es <> 0 Then s = s + " Jacobsthal-Lucas " + " & " + ajusta(es)

 

If s = "" Then s = "No es de ningún tipo"

estipohoradam = s

End Function

 

Así, por ejemplo, estipohoradam(76) nos devuelve Lucas  & 10, y estipohoradam(81), No es de ningún tipo.

 

Podemos seguir recorriendo tipos de sucesiones recurrentes, como las de Perrin y otras, pero no suelen demandar nuestros trabajos unas funciones directas como las que aquí se han presentado.

 

Otras recurrencias

 

El contenido de esta entrada nos ayuda si necesitamos definir una función para sucesiones que no sean de Horadam, pero el procedimiento para encontrar funciones de este tipo es el mismo, salvo la fórmula de recurrencia.

 

No hay comentarios: