martes, 25 de marzo de 2014

Triangulo de Pascal por Recursividad (C++)

Bueno, en esta ocasión, les presento un ejercicio que apareció mágicamente en mi examen. Se trata de generar el triángulo de Pascal mediante la técnica de la recursividad.


ok, mucho bla bla y poco código, comencemos.

Explicación:
El triángulo de Pascal es una representación de los coeficientes binomiales de ordenados en forma triangular. Es llamado así en honor al matemático francés Blaise Pascal.


El valor en azul, llamado "n" representa el exponente del binomio es decir:


Notemos que los coeficientes de los monomios corresponden a los números de la fila con el mismo valor de n.
Ademas, notemos la dependencia de los elementos de cada fila, referente a la fila anterior, que se genera así:


Por tanto los elementos de la fila 4 dependen directamente de la fila 3, y asi sucesivamente para todas las filas, exceptuando obviamente, el primer termino y el ultimo de cada fila, que no dependen absolutamente de nadie.

Ademas notemos que la cantidad de terminos de cada fila es uno mas que el valor de n, osea n+1 términos.

Llamemos a la fila 3 y 4, como T3 y T4 respectivamente. La dependencia se puede anotar asi:

T4[0]=1;
T4[1]=T3[0]+T3[1];
T4[2]=T3[1]+T3[2];
T4[3]=T3[2]+T3[3];
T4[4]=T3[3]+T3[4];
T4[5]=1;

y justamente es esto lo que se hace en la programación del algoritmo que les presento.

1. Inicio un vector T con un solo espacio, y ademas con el valor 1.

2. Pedimos el valor del numero de filas a generar (n).

3. Llamamos a la funcion pascal, con estos valores iniciales.

En este caso, yo lo llamé vector T (al inicio), ingresamos el valor de n, y el valor de la primera fila c=0.

Ya una vez hecho esto, les muestro como esta estructurado el algoritmo de la funcion pascal.

  
4. Creamos una función, donde debemos enviar un vector con los terminos de la anterior fila, el valor de la fila final (n) y el valor de la fila actual (c), que vamos a generar. sabemos que la fila "c" tendra c+1 elementos, por lo que debemos inicializar la primera y ultima posicion con unos.

5. El vector con el que comienzo la generacion auxiliar o intermedia de los terminos se llama aux, tendrá como tamaño, el valor de c+1, osea puede ser llenado con c términos, numerados de 0 a c.

6. Anotamos los términos 0 y c de la fila nro "c".

7. Con el primer ciclo for, generamos los términos restantes (los que estan entre 0 y c, a excepcion de esos 2 claro está).

8. Aumentamos el valor de c en 1. 

9. Llamamos nuevamente a la función con nuestro nuevo vector, el mismo valor final (n) y el numero de fila que queremos generar. En este caso seria c+1.

Hecho todo esto, les muestro finalmente el resultado:


it works!

P.S. El codigo de ejemplo lo puedes descargar desde aqui.
La contraseña, como siempre, es "mrsonels" sin comillas.

listo! me voy a clases, un saludo
Mrsonels


No hay comentarios:

Publicar un comentario