Ir al contenido principal

Sucesión de Fibonacci: código ensamblador

En este blog, me gustaría dar un resumen comprensible sobre una sucesión interesante e infinita, hablo de la sucesión de Fibonacci. Es fundamental llegar a programar esta sucesión cuando eres estudiante de ingeniería de computación, ya que es un buen ejercicio para cuando se esta aprendiendo recursividad. Funcionalidades recursivas fue, es y será siempre una herramienta primordial para la creación de programas.
Imagen 1. Sucesión de Fibonacci, sitio web: gutl.jovenclub.cu/python-y-la-sucesion-de-fibonacci


La sucesión de Fibonacci

Primero que todo, esta aportación de la matemática de parte de Leonardo De Pisa surge de un problema que propuso  Liber Abaci, lo cual el problema consistía en: 

" ¿Cuántas parejas de conejos conseguiremos en un año si empezamos con una pareja de conejos que produce cada mes otra pareja que a su vez procrea a los dos meses de vida? "

Entonces a partir de ese problema, la sucesión de Fibonacci consta de siempre sumar los dos últimos resultados (todos los números presentes en la sucesión, son números de Fibonacci). En la siguiente imagen se verá como se comporta la sucesión.

Sucesión de Fibonacci
¿Qué paso? Pues:
  • 0+1=1 / 1+1=2 / 1+2=3 / 2+3=5 / 3+5=8 / 5+8=13 / 8+13=21 / 13+21=34
Esa sucesión anterior que se muestra, es la regla la cual es:
  • F(n)=F(n-1)+F(n-2)

Código

  • Pseudocódigo
Mostraré primero como es el pseudocódigo de la sucesión de Fibonacci para una mejor  compresión para su programación.(Ver ilustración 2)
ilustración 2. Pseudocódigo de la sucesión de Fibonacci

  • Python
Lo mostraré en este lenguaje ya que es un lenguaje donde la mayoría de expertos recomiendan empezar aprender a programar, por su facilidad y también quería dar un ejemplo de como se programaría esta sucesión en una lenguaje de alto nivel. Python realiza una pila que termina hasta que el "n" de 1 y empieza a sumar todo lo de la pila y retorna el resultado (Ver ilustración 3).
Ilustración 3, código de la sucesión de Fibonacci en Python.
  • Ensamblador (ARM)
Lo ensañaré en este lenguaje ya que es un nivel muy bajo y es uno de lenguajes que más temor provoca en los estudiantes de computación. No es nada complicado, simplemente es de analizar el problema, crear una solución en un diagrama de flujo  y luego adaptarlo al lenguaje de programación. (Ver ilustración 4 y 5)
Ilustración 4, Primer parte de código

Ilustración 5, Segunda parte de código
Lo anterior lo que puede ser confuso son que los datos se manejan por medio de registros pero sigue la misma secuencia, anterior sumado con actual y así sucesivamente. La función "function" hace eso, incrementa el contador y se detiene hasta que sea igual al número de entrada, mientras no sea igual suma el anterior más el actual y anterior toma el valor de actual y actual toma el valor del resultado de la suma entre actual y anterior. La función final solo imprime el resultado.
Si, entiendo fue 43 líneas más que en Python, pero no siempre existió ese lenguaje y aun sin existir ya existía la programación de la sucesión de Fibonacci.
Recomiendo programar en ensamblador (cualquier tipo), da un punto de vista y mejora aun más la compresión para solución de problemas lo cual es muy importante para  el mundo del desarrollo de Software.




Referencias

Comentarios

Entradas populares de este blog

Código BCD

¿Qué es código BCD? El código BCD (decimal codificado, en inglés Binary-Coded Decimal), es una representación de números decimales en el sistema binario, lo cual cada dígito decimal es una codificación con secuencia de 4 bits, con esta representación se puede ver la relación que existe entre un número decimal y ese número en codificación binaria. Este sistema de numeración es ponderado, lo cual quiere decir que cada posición de una secuencia de dígitos obtiene cierto valor.  Esta representación llega a utilizar 4 dígitos binarios para representar 0 al 9. Para poder el representar el equivalente se pone el valor 1 donde se ocupa y 0 donde no se ocupa, con 4 dígitos, se pueden representar 16 números (0000-1111), pero en el código BCD, sólo se usan diez de ellos, las 6 combinaciones que no se emplean (1010, 1011, 1100, 1101, 1110 y 1111) no son válidas en el código BCD.  (Ver imagen 1) Imagen 1: números decimales respresentados en BCD Ejemplo 1   En el ejemplo 1 se

Obtener el residuo: operación módulo en ensamblador

 Para este blog quisiera hablar de un algoritmo que encontré y me sirvió para la tarea que me habían dejado. El algoritmo que encontré saca el residuo que se obtiene de una división, osea hace la operación módulo. El residuo es algo que durante el colegio no le tome importancia y me sorprende la importancia que tiene en el ámbito de la programación. Un ejemplo donde se utiliza el residuo en la programación es cuando el programador quiere obtener el último dígito de algún número.  La operación de módulo encuentra el residuo que queda después  de aplicar una división. (Ejemplos en la ilustración 1) Ilustración 1. Ejemplo de divisiones que dejan residuo Muchos lenguajes para aplicar el módulo de dos números funciona simplemente utilizando el signo "%" en el medio de los dos números, otros ponen "mod" en medio de los dos números. Sin embargo en algunos tipos  de lenguajes ensamblador no existe una forma tan directa y fácil para obtener el residuo de una divisió