martes, 27 de febrero de 2018

Programación Funcional en LINQ - 2.19: Teoría de Números: Generar Triángulo de Pascal (Versión Iterativa)

1. Problema

Generar un triángulo de Pascal.

2. Solución

Para la solución de este problema no se usará recursión; a razón de que puede resultar lento y podría ocasionar un desbordamiento de memoria.


Se recurre al uso de la técnica de memorización: almacenamiento externo para guardar cálculos, y que éstos sirvan para las siguientes iteraciones (Mukherjee, 2014).

3. Código C#




Aunque el código anterior incluye comentarios, valdría la pena hacer notas acerca de cómo se generan los nuevos valores:
  • Línea 32-33: El método de extensión First busca la primera coincidencia que cumpla la condición:

    v => v.Item1 == (filaActual - 1) && v.Item2 == (j - 1)

    Esto quiere decir que va a buscar el Item1 que cumpla la condición (filaActual - 1): fila anterior; y además, el Item2 que cumpla condición (filaActual - 1):  columna anterior.

    De forma análoga para el ítem que suma el siguiente valor de la fila anterior y de la columna actual:

    v => v.Item1 == (filaActual - 1) && v.Item2 == j

    Nótese que la expresión v.Item2 == j hace referencia al valor (Item3) que está enseguida de la columna anteriormente encontrada.
Prueba de ejecución:
Triángulo de Pascal con 12 filas.
Figura 1. Triángulo de Pascal con 12 filas.

4. Literatura & Enlaces

Mukherjee, S (2014). Thinking in LINQ Harnessing the Power of Functional Programming in .NET Applications. United States: Apress.

O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.