1º.-Había que mostrar los cálculos del orden 1 al 44 de Fibonacci.
2º.-Pensé en un bucle pero me acordé de YIELD, que a la postre es muy parecido si pensamos en ensamblador: un bucle es un salto x veces, YIELD se comporta de la misma manera, es un salto x veces, y así me quedaba el código más bonito y en una función. Los saltos son las intrucciones que menos ciclos de procesador ocupan en un procesador Intel.
3º.-Para las operaciones pensé en las sumas ya que son las operaciones aritméticas que menos ciclos de procesador necesitan.
4º.-Utilicé un array para almacenar los valores temporales porque su almacenamiento en memoria es contiguo y su acceso a memoria esta guardado en un registro del procesador y el acceso a la posición es un nº igual de bytes ya que los elementos son del mismo tipo.
Una de las cosas que se me escaparon y que no conocía, fué que mostrar los datos es más rápido en un formulario windows que en la consola.
Sin más, aquí os dejo el código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Fibonacci
{
class Program
{
static void Main(string[] args)
{
DateTime inicio=DateTime.Now;
foreach (long num in Fibonacci(44))
{
Console.WriteLine(num);
}
Console.WriteLine(DateTime.Now - inicio);
Console.ReadKey();
}
static IEnumerable
{
yield return 0;
yield return 1;
long[] nums = {0,0,1};
for (int i = 0; i <= n;i++ ) { nums[0] = nums[1] + nums[2]; nums[1] = nums[2]; nums[2] = nums[0]; yield return nums[0]; } } } }
No hay comentarios:
Publicar un comentario