Ordenamiento Quicksort (Rápido!) en Java

แชร์
ฝัง
  • เผยแพร่เมื่อ 30 ม.ค. 2025

ความคิดเห็น • 118

  • @CINUPTC
    @CINUPTC 12 ปีที่แล้ว +4

    gracias,, muchas gracias de verdad a mi profesor de la universidad no le entiendo nada nada.pero a usted, le entiendo muy bien, explica de una manera sencilla, y clara.
    gracias por esta magnifica oportunidad, de esta manera puedo sacar mi carrera adelante, ya que me estaba desmotivando por no entender la programacion, Dios lo bendiga. saludos desde Bogotá colombia....

  • @isaacsantanaaquino7508
    @isaacsantanaaquino7508 6 ปีที่แล้ว +73

    public class Ordenador{
    public void ordenarQ(int[] array){
    array = quicksort1(array);
    }
    public int[] quicksort1(int numeros[]){
    return quicksort2(numeros,0,numeros.length-1);
    }
    public int[] quicksort2(int numeros[],int izq, int der){
    if(izq>=der)
    return numeros;
    int i=izq, d=der;
    if(izq!=der){
    int pivote;
    int aux;
    pivote = izq;
    while(izq!=der){
    while(numeros[der]>=numeros[pivote] && izq

  • @ryvenfv880
    @ryvenfv880 6 ปีที่แล้ว

    Me encantó tu explicación. La verdad es que hace muchos años no le entendí al Quicksort y ya le entendí. No tengo problema con la recursividad, pero en particular este algoritmo no lo entendía.

  • @stevenaragonurrea9083
    @stevenaragonurrea9083 8 ปีที่แล้ว +25

    Me encanta los vídeos que manejas, estoy en la transición de lenguaje, me jode un poco que no tabules bien el código.
    (muchas gracias por el aporte).

    • @stevenaragonurrea9083
      @stevenaragonurrea9083 8 ปีที่แล้ว +2

      s17.postimg.org/qgyqe47cv/algoritmo.png
      (tabulado) mas fácil de transcribir.

  • @Cranidactyl
    @Cranidactyl 11 ปีที่แล้ว +2

    Bien explicado, solo un problema de código, ayudaría bastante si señalas con las llaves el inicio y final de cada sentencia y respetar las sangrías.

  • @KelvinCastilloC
    @KelvinCastilloC 12 ปีที่แล้ว

    El video es mucho mas q interesante. Solo hace falta practicarlo mucho y dar las gracias al profesor por toda su paciencia.

  • @joseluisperezmontano2391
    @joseluisperezmontano2391 3 ปีที่แล้ว +2

    La explicación de la lógica cumple mas o menos con el ordenamiento quickSort (aunque en si el ordenamiento se hace de una manera un poco diferente).
    Lo que si es que el código no es para nada Quicksort tengo 3 observaciones respecto a eso si gustan pueden hacer las pruebas
    1.- el while que se supone va a ir incrementando el izq (izq++) NUNCA SE EJECUTA
    2.- quicksort2(numeros, i, izq - 1) Nunca realiza modificaciones al array siempre cae en la condicional que esta al principio para retun numeros;
    NOTA: si eliminas esas dos partes del codigo, va a seguir realizando de forma correcta el ordenamiento
    3.- ese algoritmo lo que hace para el ordenamiento es ir posicionando del lado izquierdo los numero mas pequeños hasta terminar de recorrer todos sus elementos, un poco parecido al insert sort

  • @Sergio1Bautista
    @Sergio1Bautista 7 ปีที่แล้ว

    Lo que tanto me gusta de estos videos es que no duran 40 minutos, hora y media...
    Y le entiendo.

  • @mariafernadadiaz573
    @mariafernadadiaz573 12 ปีที่แล้ว

    me han servido de mucho los tutos y espero que mas mujeres como yo se animena a aprender programacion ya que esto tambien lo odemos hacer nosotras gracias jorge por compartir tus conocimientos un saludo desde colombia para ti y un besito de mi parte

  • @sataku4415
    @sataku4415 9 ปีที่แล้ว +2

    Hola muchas gracias por el aporte.
    Creo que se puede mejorar bastante el codigo, y hay cosas que te confunden, como por ejemplo le estás modificando el valor de los parametros "izq" y "der" en lugar de modificar los valores "i" y "d" que son los que deberías aumentar y disminuir de valor.

  • @carlitozz31
    @carlitozz31 11 ปีที่แล้ว +2

    Que tal amigo! excelente vídeo, le eh entendido muy bien! muchas gracias...
    Podrías hacer un vídeo en la cual expliques la forma de hacer el camino mas corto en grafos? para mi es un tema algo difícil y hasta ahora no eh podido hacerlo! te agradecería mucho si lo haces!

  • @camilo.magnus
    @camilo.magnus 3 ปีที่แล้ว +1

    El problema de no manejar identacion es que no se sabe cuándo se abre o cierra un ciclo, bucle o condicional.

  • @codepanda5171
    @codepanda5171 7 ปีที่แล้ว +2

    Buen vídeo, gracias por los anteriores también, pero... enserio tabula... o si no te gusta tabular siempre puedes hacer ctrl + shift + f.
    Seguir tu código fue una aventura en esta ocasión.
    igualmente gracias por tu tiempo

  • @martinsouza9994
    @martinsouza9994 7 ปีที่แล้ว +28

    Me parte los ojos la mala indentación

  • @patriciafiallos8260
    @patriciafiallos8260 ปีที่แล้ว

    Muy bien explicado😀👏👏 muchas gracias!!!

  • @lixon111
    @lixon111 2 ปีที่แล้ว

    Muchas gracias por la explicación😁

  • @javiruizgarcia2166
    @javiruizgarcia2166 12 ปีที่แล้ว

    esta muy bien expuesto ... enhorabuena por el video-tutorial entero

  • @danisotos
    @danisotos 9 ปีที่แล้ว +2

    hola, muchas gracias por todo el tutorial, evidentemente como vos decis es muy dificil entenderlo a la primera, la duda que me queda es por que retorna numeros 2 veces seguidas?

  • @JadeKaterine
    @JadeKaterine 12 ปีที่แล้ว

    Nada es "muy excelente", la excelencia es lo maximo que se puede alcanzar. En teoría, no existe nada mejor que esto, por lo tanto, decir "muy excelente" es redundante.

  • @franklarrea393
    @franklarrea393 6 ปีที่แล้ว

    El video tiene sus años pero desde mi ignorancia no me explico el porque el nombre tan largos de las variables quick1; quick2 o lo que sea pones lo siguiente quicksort_punto_net_punto_ar_punto_mx_punto_us_punto_irak_punto_com (JOptionPane.showInputDialog("Sarcasmo no te ofendas"); siendo de que declarando quick1, quick2 y asi sucesivamente estaria mejor y mas entendible, Saludos!!

  • @eduardosandoval5017
    @eduardosandoval5017 5 ปีที่แล้ว

    en que parte estas decidiendo de que si los numeros son iguales se deben ir a la izquierda o derecha?

  • @drDUMBex
    @drDUMBex 2 ปีที่แล้ว +1

    me desespera como no usas la tabulación para marcar el anidado...

  • @DanielCardozoC
    @DanielCardozoC 9 ปีที่แล้ว

    Gracias por la explicación y el código, aunque tengo que admitir que esa desastrosa identación me iba causando algunos dolores de cabeza.

  • @camilocamargo98
    @camilocamargo98 7 ปีที่แล้ว

    es indispensable los tres metodos quicksort que creó para poder ordenar un arreglo???

  • @Alexander_Evergarden
    @Alexander_Evergarden 2 ปีที่แล้ว

    una pregunta, el método Arrays.sort que es el que usa java es el mismo que quickSort? o algun otro como shell, merge, etc? o este no tiene como tal un parecido con alguno de estos?

  • @jonathanrojassimon2901
    @jonathanrojassimon2901 8 ปีที่แล้ว

    Muchas gracias, me sirvió mucho para implementarlo en un proyecto

  • @enteymartinez87
    @enteymartinez87 11 ปีที่แล้ว

    excelente explicacion, ni mi maestro de programacion me explicaria asi, muchas gracias por compartir el conocimiento. podrias hacer uno de shell porfavor

  • @tecosk8ordie
    @tecosk8ordie 8 ปีที่แล้ว +3

    Parece estar el código al contrario que la explicación. Lo que cuadraría con la explicación sería el while de la izq por encima con . Y parece que falta la sustitución de la posición del pivote.

  • @nandoplaza6703
    @nandoplaza6703 12 ปีที่แล้ว

    oye amigo para listas dobles no tienes ejemplos como hacer efectiva la utilizacion del metodo quicksort para ordenar nodos.

  • @Fenixloquendofull
    @Fenixloquendofull 10 ปีที่แล้ว

    ok.....creo que tendre pesadillas esta noche hahaha
    Buen video, bien explicado como siempre

  • @axyLms
    @axyLms 7 ปีที่แล้ว +1

    No entiendo el sentido de poner dos if que se contradicen, siendo que podrias poner solo uno y por descarte seria el otro, es decir un if-else. Ademas pones innecesariamente Else: return numeros, podrias haberlo puesto dentro del if(der==izq). Por otro lado, la mala identacion y que no pongas corchetes en algunos ciclos, hace que no se entienda mucho el orden...

  • @erickjavierl.c.5949
    @erickjavierl.c.5949 3 ปีที่แล้ว +1

    ME SUENA BASTANTE REDUNDANTE, POR QUÉ NO EN LUGAR DE DOS MÉTODOS, LO METES EN UNO? Y POR QUÉ EN LUGAR DE SUBSTITUIR I=IZQ, DEJAS O I O IZQ?

  • @JadeKaterine
    @JadeKaterine 12 ปีที่แล้ว

    Es en el contexto. Decir muy excelente esta mal dicho, el muy sobra, intenta googlear eso. También puedes ver esta animación, lo explica mucho mejor que yo.

  • @wordle_23
    @wordle_23 11 ปีที่แล้ว

    entiendo se uso int para entender mejor, pero yo voy a usar números doubles,, números de hasta 10.000 , en el arreglo, solo para que valga la pena el arreglo,

  • @breiyercorpasamaya8554
    @breiyercorpasamaya8554 8 ปีที่แล้ว

    Deberías dejar el ejercicio en block de notas en la descripción u algo parecido.

  • @jonatantaddeisimancas3152
    @jonatantaddeisimancas3152 6 ปีที่แล้ว

    es necesario esta linea: "while(numeros[izq] < numeros[pivote] && izq < der) izq++;" ???

  • @A00512773
    @A00512773 11 ปีที่แล้ว +1

    Excelente aportacion:D , Podrias hacer el RadixSort?

  • @chavocolombiano
    @chavocolombiano 11 ปีที่แล้ว

    Yo creo que es dificil de entender por que es un algoritmo basado en recursividad o eso veo yo,toca prestarle mucha atencion y gastarle un buen tiempo y meterle su buena logica

  • @pedromontiel323
    @pedromontiel323 8 ปีที่แล้ว

    Con tigo estoy aprendiendo a programar. Tus videos son muy buenos y haces honor a tu cuenta "código facilito" pero tengo una queja desde siempre.... Nunca explicas algo tan insignificante pero para los que apenas estamos iniciando es una gran duda.. Y es porque en algunas variables usas " paréntesis" y en otras "corchetes" .. Y porque en algunos lados usas punto y coma y en otros no pones nada.. Es algo muy básico pero para los que estamos iniciando aveces nos confundimos.

    • @4X4ALTAYRK2K
      @4X4ALTAYRK2K 7 ปีที่แล้ว

      un programador aprende de los libros y se apoya en los videotutoriales, en los libros todo esta muy bien explicado.

    • @jaimeogrady6843
      @jaimeogrady6843 7 ปีที่แล้ว

      No necesitas libros para aprender eso. Googlea y vas a encontrarlo muy bien explicado. Igualmente te comento que eso es algo muy de la base de la programación y esto es un algoritmo relativamente avanzado. Te conviene aprender la base y despues seguir con cosas mas complejas. Lo de los corchetes, son arrays o vectores (es lo mismo con otro nombre) y los parentesis, supongo que te referis a los metodos, son funciones a las que hay que pasarle parametros, los cuales van entre parentesis.

  • @macariovzi
    @macariovzi 12 ปีที่แล้ว

    muy buena explicación, me encantó

  • @ema_gym
    @ema_gym 7 ปีที่แล้ว

    Muchas gracias por el tutorial.

  • @franklinaldas2756
    @franklinaldas2756 9 ปีที่แล้ว

    DISCULPA COMO PUEDO ORDENAR ASÍ MISMO UN ARREGLO PERO QUE EL USUARIO INGRESE EL VALOR DE CADA POSICIÓN ¿¿??? Y LO ORDENE CON EL MÉTODO QUICKSORT

  • @AMADOR368
    @AMADOR368 12 ปีที่แล้ว

    Muy buena explicacion ;; Gracias

  • @produccionesdevasta
    @produccionesdevasta 9 ปีที่แล้ว

    Esta parte de codigo es necesaria?, por que creo no hace nada ya que numeros[izq] y numeros[pivote] valdría el mismo valor así que nunca seria valido. Espero alguien pueda responderme, gracias.
    while (numeros[izq] < numeros[pivote] && izq < der)
    izq++;

  • @deleydatrujillo3933
    @deleydatrujillo3933 8 ปีที่แล้ว

    Muy buena explicación.

  • @danielcruzrodriguez9026
    @danielcruzrodriguez9026 11 ปีที่แล้ว

    ¿Como podria ordenar numeros guardados en una lista simple mente enlazada en nodos?

  • @wordle_23
    @wordle_23 11 ปีที่แล้ว

    bien el esquema, después es mucho ciclo, y ciclo, creando las variables, y sabiendo poner en el lugar correctos las variables en los ciclos, no es tan difícil, creo que hay que tener mas memoria, solo para no perderse, después el ciclo hace lo suyo.

  • @carlosestebanburgoslopez4925
    @carlosestebanburgoslopez4925 10 ปีที่แล้ว

    Funciona de igual manera en el JCreator?

  • @loopme4659
    @loopme4659 3 ปีที่แล้ว +2

    public int[] quicksort(int numeros[], int izq, int der) {
    if (izq >= der) {
    return numeros;
    }
    i = izq;
    d = der;
    if (izq != der) {

    pivote = izq;
    while (izq != der) {
    while (numeros[der] >= numeros[pivote] && izq < der) {
    der--;
    }
    while (numeros[izq] < numeros[pivote] && izq < der) {
    izq++;
    }
    if (der != izq) {
    aux = numeros[der];
    numeros[der] = numeros[izq];
    numeros[izq] = aux;
    }
    }
    if (izq == der) {
    quicksort(numeros, i, izq - 1);
    quicksort(numeros, izq + 1, d);
    }
    } else {
    return numeros;
    }
    return numeros;
    }

  • @fernandoflorez8646
    @fernandoflorez8646 9 ปีที่แล้ว +1

    Excelente explicación pero para la próxima mejora la identacion.
    Gracias...!!!

  • @eijikondo3695
    @eijikondo3695 12 ปีที่แล้ว

    una pregunta, es que cuando pongo un array de 50,000 numeros llega a tener un bug me podrias ayudar!!

  • @mechipod
    @mechipod 11 ปีที่แล้ว

    gran explicación!

  • @alejandroortizc2007
    @alejandroortizc2007 9 ปีที่แล้ว

    Saludos, ¿que método puedo utilizar para ordenar una Linked List?

  •  12 ปีที่แล้ว

    Ayuda, no veo los capítulos del 23 al 26, o no existen ?

  • @DiegoGonzalez-zf6fz
    @DiegoGonzalez-zf6fz 8 ปีที่แล้ว

    Lo probé y este código solo funciona con arreglos de dimensiones pequeñas,luego da un error de recursividad infinita.Trate de controlarlo con try and catch pero sucedió que no ordena correctamente este vector. Podrías dar alguna solución a este problema.

    • @mtzrmzia
      @mtzrmzia 8 ปีที่แล้ว +1

      Seguramente el error que te ha dado es este:
      Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
      Cuando el vector es muy grande se necesitan hacer muchas llamadas recursivas al método para ordenarlo y con cada llamada recursiva estamos consumiendo memoria. La memoria durante la ejecución del programa la obtenemos de una zona llamada heap y cuando se agota aparece el error.

  • @victorfernandezflorensa7863
    @victorfernandezflorensa7863 5 ปีที่แล้ว

    Buen código :D (Hola Gimeno)

  • @alexdlveliz2394
    @alexdlveliz2394 8 ปีที่แล้ว

    acabas de salvarme la vida

  • @scl2458
    @scl2458 ปีที่แล้ว +1

    Dios me vas a hacer dormir

  • @JUNKER8O
    @JUNKER8O 8 ปีที่แล้ว

    los q tanto critican hagan sus vídeos y dejen de estar ching...o...hay muchos vídeos q empiezan desde cero

  • @luceropamelaalave6719
    @luceropamelaalave6719 7 ปีที่แล้ว

    Muy buen video👍

  • @Cyborsim
    @Cyborsim 10 ปีที่แล้ว

    ¿Hay capítulos entre el 22 y el 27? Muchas gracias.

  • @dreia2405
    @dreia2405 7 ปีที่แล้ว

    No tiene el codigo en alguna página?

  •  12 ปีที่แล้ว

    No veo los capítulos del 23 al 26, ayuda por favor.

  • @AnormalDeCarrito123
    @AnormalDeCarrito123 12 ปีที่แล้ว

    Muy buen video! Me ayudó muchísimo ;)

  • @bukineitor52
    @bukineitor52 8 ปีที่แล้ว

    disculpa, estoy seguro de que tu codigo si funciona a la perfeccion pero... hay alguna forma de hacerlo sin recursividad? esk estoy haciendo un proyecto con todos los metodos y la recursividad de tu codigo me jode todo y no se como convertirlo a mi codigo
    ayuda porfa

    • @mtzrmzia
      @mtzrmzia 8 ปีที่แล้ว

      pues este método funciona gracias a la recursividad, así como el ordenamiento en los arboles binarios ....

  • @nazald
    @nazald 11 ปีที่แล้ว

    Vaya podrias haber especificado que lo ibas a hacer de forma recursiva :S

  • @alexandroayalac.8604
    @alexandroayalac.8604 3 ปีที่แล้ว

    No sé qué hice mal, pero, cuando ejecuto me sale esto [I@2d363fb3 en vez de los números

  • @vrooomize
    @vrooomize 4 ปีที่แล้ว

    Deberías poner los corchetes siempre, si no hace confuso el código

  • @manuelguzmancanal
    @manuelguzmancanal 12 ปีที่แล้ว

    me marca un error en el else

  • @reizewr
    @reizewr 11 ปีที่แล้ว +2

    estoy aprndiendo este metodo en mis clases, podrias prestarme tus codigos de metodos de ordenamiento porfa.

  • @MNLAntony
    @MNLAntony 12 ปีที่แล้ว +1

    Juela!! Es el algoritmo más complicado que había visto hasta ahora, muy, muy difícil de entender... :(

  • @Shk4You
    @Shk4You 7 ปีที่แล้ว

    una pregunta amigo porque hay 2 return numeros al final?

    • @4X4ALTAYRK2K
      @4X4ALTAYRK2K 7 ปีที่แล้ว

      cuando "if" o "else" no llevan llaves, se toma en cuenta hasta la primera linea y ya no la segunda linea, por eso ves un return despues de "else" y otro return que pertenece al if que encierra todo con sus llaves.

    • @danielalejandro9393
      @danielalejandro9393 6 ปีที่แล้ว

      ???
      :s

  • @cristianpcha
    @cristianpcha 11 ปีที่แล้ว

    Por favor haz uno del metodo shell

  • @Z3UXGOD
    @Z3UXGOD 12 ปีที่แล้ว

    ESTA MUY EXCELENTE

  • @Jose__Manuel
    @Jose__Manuel 7 ปีที่แล้ว

    Cuando dices que es más rápido ¿a que te refieres?... En eso no lo sigo.

  • @ileanr.progra-lw9ho
    @ileanr.progra-lw9ho ปีที่แล้ว

    //copie el codigo pero no me corrio.
    public class Intentos{
    public static int[] arreglarArreglo(int[] _arreglo){
    return arreglarArreglo2(_arreglo, 0,(_arreglo.length-1));
    }
    private static int[] arreglarArreglo2(int _arreglo[], int izquierda, int derecha){
    // caso uno
    if (izquierda>=derecha) return _arreglo;
    // caso dos.
    int i=izquierda, d=derecha;
    if (i != d) {
    int pivote, aux;
    pivote=izquierda;
    while (izquierda!=derecha) {
    while (_arreglo[derecha]>=_arreglo[pivote] && izquierda

  • @nicolasprato8581
    @nicolasprato8581 9 ปีที่แล้ว +14

    Deberias explicar mejor los conceptos porque la gente que trata de aprender desde cero se queda con muchas dudas y sabiendo ni siquiera la mitad de las cosas

    • @axelkakasho
      @axelkakasho 9 ปีที่แล้ว +13

      +john nick tienen 23 videos antes de este en el curso para que practiques, aprendas, busques por tu cuenta y llegues aquí sin estar en ceros.

    • @rodrigosandovalyou
      @rodrigosandovalyou 8 ปีที่แล้ว +3

      este procedimiento ya es para gente que tenga conocimientos previos a programar de lo contrario busca el algoritmo burbuja que es mas facil hace lo mismo pero es mas tardado en completar la ejecucion

    • @carlos789xel
      @carlos789xel 6 ปีที่แล้ว +2

      este ordenamiento no es para iniciados en programacion es mas bien para un nivel intermedio

  • @Lajaramillo2
    @Lajaramillo2 12 ปีที่แล้ว

    error en el else...

  • @JohnOsorio93
    @JohnOsorio93 9 ปีที่แล้ว

    cómo ordeno Strings, (nombres, apellidos, etc...)

  • @simonbelmontful
    @simonbelmontful 10 ปีที่แล้ว

    buen tutorial!!!

  • @RD-sp4ex
    @RD-sp4ex 3 ปีที่แล้ว

    tu codigo no soporta 150 000 numeros

  • @PostgresSql
    @PostgresSql 10 ปีที่แล้ว

    grato muito bem explicado seu tutorial

  • @heribertorg1991
    @heribertorg1991 8 ปีที่แล้ว

    oye bro y el código fuente donde lo descargo?

    • @pedromontiel323
      @pedromontiel323 8 ปีที่แล้ว +1

      Otoniel Heriberto Robles González nunca deja el código ese siempre lo tienes que escribir tu... O almenos eso me he dado cuenta en este blog.

  • @wordle_23
    @wordle_23 11 ปีที่แล้ว

    bueno no se entiende a la primera, pero es java real.

  • @elgameranonimus3935
    @elgameranonimus3935 3 ปีที่แล้ว

    yo esto no lo pillo, creo que no doy pa tanto

  • @tekkadan7673
    @tekkadan7673 6 ปีที่แล้ว

    Me confundí más de lo que estaba

  • @ema_gym
    @ema_gym 7 ปีที่แล้ว +1

    Ojo que despues de este video #22 se salta al #27, aqui esta el enlance del siguiente (#23)
    th-cam.com/video/ZoCk8w86JlU/w-d-xo.html

  • @RiquelmeMunozSebastian
    @RiquelmeMunozSebastian 4 ปีที่แล้ว

    la verdad viendo más tranquilamente el video, este no es como otros, la parte en powerpoint te quedó bien, pero el código como la mierda, la indentación pésima, pareciera que hubiera un while anidado dónde no lo hay y se confunde el proceso que realiza cada if o while.

  • @camilocamargo98
    @camilocamargo98 7 ปีที่แล้ว +14

    no entendi ni mierda

    • @yonatannperes9778
      @yonatannperes9778 7 ปีที่แล้ว +1

      Camilo Camargo Tmre yo tampoco :v
      Pero si el pudo entenderlo entonces por que nosotros no?

    • @victorrobles6515
      @victorrobles6515 6 ปีที่แล้ว

      Yonatann Peres Asi perrin, tu tambien puedes hacerlo

  • @mrthesmart92
    @mrthesmart92 12 ปีที่แล้ว

    mm pudes pasar tu codigo...

  • @edwincervantesvega5949
    @edwincervantesvega5949 12 ปีที่แล้ว

    métodos de búsqueda

  • @Leslaliun
    @Leslaliun 7 ปีที่แล้ว +1

    no entendí un carajo

  • @ambrokc
    @ambrokc 11 ปีที่แล้ว

    amigo me podras ayudar con el metodo shell

  • @vladosantiagotopcichuergo9455
    @vladosantiagotopcichuergo9455 4 ปีที่แล้ว

    tu identacion esta hecha con las patas carnal...

  • @yeseniakaulitz
    @yeseniakaulitz 10 ปีที่แล้ว

    no me funiono :(

  • @dinusc9175
    @dinusc9175 8 ปีที่แล้ว

    lo haces por recursividad y te ahorras sufrimirntos.