Triángulo de Pascal en C++

¿Han escuchado eso de que en el triángulo de pascal cada número es la suma de los dos que están sobre él? ¡PUES LES HAN MENTIDO!, eso no es más que una coincidencia y la forma mas fácil de escribirlo en el pizarrón. En realidad el triángulo de pascal es una matriz donde cada elemento es el coeficiente binomial o combinación de sus coordenadas. Las pruebas.

El caso es que para obtener el triángulo de pascal en c++ hay muchas formas, pero la que está a continuación yo la considero especial porque está basada en su propia definición.

#include
using namespace std;

int factorial(int n)
{
    if(n<2)
        return 1;
    else
        return n * factorial(n-1);
}

int combinacion(int n, int r)
{
    if(r==1)
        return n;
    else
    {
        if(n==r)
            return 1;
        else
            return factorial(n) / (factorial(r) * factorial(n - r));
    }
}

int main()
{
    for(int i=0; i<=6; i++)
    {
        for(int ii=0; ii<=i; ii++)
            cout << combinacion(i, ii) << "  ";
        cout << endl;
    }
    return 0;
}

Vamos analizándolo:

1. La primera función es para obtener el factorial de forma recursiva.

2. La segunda es para obtener el coeficiente binomial o combinación de dos números, es en esencia esta fórmula:
C(n,r) = n! / r!(n-r)!
Mas información sobre coeficientes binomiales.

3. En el main hay dos ciclos que se encargan de armar una matriz para obtener el coeficiente binomial de cada uno de ellos.

  • La primera pareja de numeros es (0,0) y su combinación es 1. Nuestro primer numero del triangulo de pascal.
  • La siguiente es (1,0) y luego (1,1) cuyas combinaciones son 1 y 1. Segunda línea.
  • Luego tenemos (2,0) (2,1) y (2,2) cuyas combinaciones son 1, 2 y 1. Tercera linea
  • Y así seguimos obteniendo nuestras líneas.

Y pues así es, el que me diga que no tiene forma de triángulo está ciego, porque si es triángulo, lo que pasa es que no es isósceles.

8 thoughts on “Triángulo de Pascal en C++

  1. Este código es mucho más óptimo, utiliza la propiedad que dices que es coincidencia, prescinde de multiplicaciones y divisiones utilizando sólo sumas, lo que es ampliamente más eficaz, por otro lado no utiliza llamadas recursivas, su complejidad, espacial y temporal, es muy inferior, sin embargo tu código es muy bueno para fines didácticos.

    int BinomCoeff(int n, int k)
    {
    int* C = (int*)calloc(k+1, sizeof(int));
    int i, j, res;
    C[0] = 1;
    for(i = 1; i 0; j–)
    C[j] = C[j] + C[j-1];
    }
    res = C[k];
    free(C);
    return res;
    }

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s