Triangulo de Pascal Recursivo (Java)



Problema:
Se pide encontrar la n-sima la del triangulo de Pascal. El triangulo de Pascal es el siguiente:

0               1

1            1    1

2          1    2    1

3       1    3    3    1

4     1    4    6    4    1

Para poder solucionar este ejercicio se considero la idea de que los valore se encuentran en una posición del triangulo de pascal por ejemplo en la fila 3 y 4  las posiciones estarían dadas respectivamente por:

        1            3            3           1

     (3,0)      (3,1)      (3,2)      (3,3)

1            4            6            4            1

(4,0)     (4,1)      (4,2)     (4,3)       (4,4)

con esta idea se puede inferir que:

triangulo de Pascal (3, 2) + triangulo de Pascal (3,3) = triangulo pascal (4,3)

Código Triangulo Pascal Recursivo:


  public static void main(String[] args) {        
       
     trianguloPascal(6);
  }

    
  public static void
trianguloPascal(int n){
      trianguloPascal(n,0);
  }

    
  public static void
trianguloPascal(int fila,int columna){
      if(fila==-1){            
          return;
      }
      trianguloPascal(fila-1,columna+1);
      for (int i=0;i<columna;i++){
          System.out.print(" ");
      }
      trianguloPascalEstructura(fila,0);
      System.out.println();        
  } 
    
  public static void
trianguloPascalEstructura(int fila,int columna){
        if(fila+1==columna){
            return;
        }
        System.out.print(trianguloPI(fila,columna)+" ");
        trianguloPascalEstructura(fila,columna+1);
   }
    
  public static int
trianguloPI(int fila,int columna){
      if (fila==0){
          return 1;
      }else if(columna==0 || columna==fila){
          return 1;
      }
  return trianguloPI(fila -1,columna-1)+trianguloPI(fila-1,columna);
  }


El método trianguloPascal(int n) es una sobrecarga del método recursivo que imprime el Triángulo de Pascal

El método trianguloPascal(int fila, int columna) imprime cada fila del triángulo de Pascal recursivamente

  • Condición base: Si fila es -1, el método retorna y termina la recursión. Esta condición detiene el ciclo una vez se imprimen todas las filas.
  • Primero, se llama recursivamente a trianguloPascal(fila - 1, columna + 1) para imprimir las filas superiores del triángulo. Esto asegura que las filas superiores se impriman antes que la fila actual.
  • Luego, hay un ciclo for que imprime espacios en blanco para alinear los números del triángulo correctamente.
  • Después, llama a trianguloPascalEstructura(fila, 0) para imprimir los valores de la fila actual.
  • Finalmente, imprime un salto de línea System.out.println() para pasar a la siguiente fila.

El método trianguloPascalEstructura (int fila, int columna) imprime los valores de una fila específica

  • Condición base: Si fila + 1 == columna, la función se detiene. Esto asegura que no se impriman más valores de la fila una vez se alcanza el número correcto de valores.
  • Luego imprime el valor del Triángulo de Pascal en la posición (fila, columna) usando el método trianguloPI(fila, columna).
  • Llama recursivamente a trianguloPascalEstructura(fila, columna + 1) para imprimir los siguientes valores en la fila.

El metodo trianguloPI (int fila, int columna) calcula el valor de un elemento del Triángulo de Pascal en una posición específica

  • Condición base: Si fila es 0, retorna 1, ya que el primer valor de cada fila en el Triángulo de Pascal es 1.
  • Si columna == 0 o columna == fila, también retorna 1, ya que el primer y último número de cada fila del triángulo siempre es 1.
  • Si ninguna de las condiciones anteriores se cumple, calcula el valor sumando los dos valores directamente superiores en la fila anterior, utilizando recursión. Esto sigue la regla del Triángulo de Pascal, donde cada número es la suma de los dos números encima de él.

Este código genera e imprime el Triángulo de Pascal de forma recursiva. Cada valor del triángulo se calcula en función de los valores de la fila anterior, y el formato se cuida mediante espacios para asegurar la correcta visualización del triángulo.

Comentarios

Entradas populares de este blog

Calculo Numérico (Oscar Zabalaga Montaño)

Potencia de un numero programacion recursiva (Java)

Teoria de Automatas (Victor Hugo Montaño)