Entendiendo la recursividad con las Torres de Hanoi

Поделиться
HTML-код
  • Опубликовано: 14 окт 2024

Комментарии • 85

  • @pahoolk
    @pahoolk Год назад +14

    Vine buscando cómo construir mi propia función _printf (aún no tengo npi de por dónde empezar) y me hiciste recordar mi infancia en un museo interactivo para niños donde había unas torres de hannoi gigantes con discos de goma, entretenido estuve más de 1 hora tratando de resolver el problema, iba con una de mis tías master en informática y dijo: "este niño va a ser un buen ingeniero" y bueno aquí estamos tratando de serlo 😅

  • @makigas
    @makigas  9 лет назад +19

    ►► Las torres de Hanoi
    Cuenta la leyenda que cuando los 64 discos de oro pasen de una torre a la otra, llegará el fin del mundo. Leyenda o no, en este vídeo cuento cómo se puede expresar de forma recursiva el algoritmo de las Torres de Hanoi. Código próximamente.
    ► Vídeo: ruclips.net/video/lilBGvaOSy8/видео.html

    • @VideogamesAsArt
      @VideogamesAsArt 3 года назад +5

      me encanta que tu comentario sea recursivo. Le hago click y vuelvo a tener el mismo comentario con el mismo enlace.

  • @quimmonzo
    @quimmonzo 2 года назад +2

    Después de buscar un rato por internet, este video me ha iluminado en pocos segundos. Gracias

  • @5THEALEX458
    @5THEALEX458 3 года назад +4

    creo que te has equivocado en el pseudocodigo, porque según te entendí, las pilas son 3 , donde las llamas o,d,a así que deducí que a=auxiliar, d=destino y o=origen. Ahora bien, dónde creo que has metido la gamba, cuando vas a explicar el caso base, pones a.apilar(o.desapilar()) cuando en realidad creo que querrías decir d.apilar(o.desapilar())
    Un cordial saludo y muchas gracias por toda la explicación, me ayudó mucho!!!

  • @Poliformado
    @Poliformado 9 лет назад +8

    Una explicación corta, clara, concisa y divertida. Es divertido ver y oír una explicación con el chiste de los memes, se hace muy ameno y la historia final de por qué se llama Torre de Hanoi, cuanto menos resulta interesante de saber.

  • @diegom0209
    @diegom0209 8 лет назад +19

    No me queda muy claro, si A es auxiliar, ¿por qué el texto dice que hay que poner en A y la voz dice "poner en Destino"?

  • @Alexander-lg2do
    @Alexander-lg2do 4 года назад +4

    Lo has explicado súper sencillo y entendible! Amé el vídeo

  • @yadyguitar
    @yadyguitar 9 лет назад

    Muchisimas gracias! No pensé que de verdad lo ibas a publicar tan rápido! Hahahah en serio gracias! Saludos!

    • @danielchisica6486
      @danielchisica6486 7 лет назад

      ¿Para que necesitabas asimilar este concepto?

    • @yadyguitar
      @yadyguitar 7 лет назад

      Daniel Chísica fue ya hace tiempo, una... para entender la recursivisad y otra, porque mi maestro de programación me pidió desarrollar este algoritmo

    • @danielchisica6486
      @danielchisica6486 7 лет назад

      Te puedo pedir algunos consejos en base a tu experiencia, es que este semestre comienzo la asignatura de Programación Avanzada

    • @yadyguitar
      @yadyguitar 7 лет назад

      claro! yadyguitar@yahoo.es

  • @perezsaul
    @perezsaul 10 месяцев назад

    GRACIASS, toma tu merecido like y me suscribo

  • @camilolopez1936
    @camilolopez1936 4 года назад +1

    Excelente video, entendí a nivel teórico cómo se resuelve el ejercicio. Muchas gracias ^^

  • @Alejopal
    @Alejopal 5 лет назад

    Muy buen video, me ha grada la forma como explicas y las notas graciosas que pones.

  • @albertvolcom730
    @albertvolcom730 5 лет назад

    Espera espera espera. También enseñas matemáticas?
    Esto se ha puesto más interesante de lo que creía

  • @cesarmaat
    @cesarmaat 5 лет назад +13

    Aprendi mas historia :'vv

  • @carolinarodriguezgalicia4797
    @carolinarodriguezgalicia4797 5 лет назад +5

    Muy buena explicación crack❤

  • @nasserelbacha3458
    @nasserelbacha3458 3 года назад +3

    No sabía que ibai daba clases de programación

  • @angiecruz5896
    @angiecruz5896 4 года назад +2

    muy bien,me sirvio mucho a resolver mi tarea

  • @spike_wav
    @spike_wav 4 года назад +1

    buen doble tempo , ya debes ir a batallar en la redbull sobrado le ganas a khan

  • @marcozini8915
    @marcozini8915 4 года назад

    Propongo una solución simple, simple y sobre todo mnemotécnica. La regla es la siguiente:
    - en un movimiento mueva el disco más pequeño, de forma circular (apuestas: a -> b
    -> c -> b, -> a, etc.),
    - en el siguiente, debe realizar la única operación posible,
    - en el siguiente movimiento, mueva el disco más pequeño nuevamente de forma circular,
    - en el siguiente movimiento, se ve obligado a realizar la única operación posible y así
    sucesivamente, hasta que todos los discos hayan sido traídos de la estaca
    "a" a la estaca de destino final "c". Esta regla también
    corrige el primer movimiento para discos impares, ya que el
    primer movimiento del disco más pequeño se repite desde a -> b y desde b -> c.
    Espero haber sido claro, gracias y disfruten.

  • @DevD_82
    @DevD_82 Год назад

    Quién diría que ibai explicara temas de programación, un abrazo maquina!

  • @HeyChobe
    @HeyChobe 5 лет назад

    Gracias es justo la explicación del algoritmo que necesitaba

  • @ignaciodelgado99
    @ignaciodelgado99 8 лет назад +2

    Muy interesante y explicativo. Like

  • @acostamartin1997
    @acostamartin1997 5 лет назад +4

    Alguien puede explicarme en qué caso práctico uno programaría usando recursividad??

    • @rockarlandy
      @rockarlandy 5 лет назад +4

      en un metodo iterativo es más optimo que el uso de ciclos que tienen los lenguajes de programacion por defecto

    • @AndreuPinel
      @AndreuPinel 2 года назад +3

      La recursividad se utiliza cuando uno no sabe el nº de capas que tiene que recorrer el algoritmo.
      Un ejemplo muy sencillo es contar los elementos de una estructura fractal irregular, como podría ser un árbol o la estructura de un disco duro (hojas - ficheros, ramas - carpetas, subramas - subcarpetas).
      Imaginemos que tú quisieras contar el nº de hojas de cualquier arbol del mundo, y de entrada tú no vas a saber cuántas ramas/sub-ramas tiene cada árbol, sólo sabes que todos tienen un tronco; podrías hacer algo tal como:
      resultado = Funcion_Contar_Hojas(tronco) // 1ª llamada
      Funcion_Contar_Hojas(rama)
      {
      resultado = 0
      foreach (hoja in rama)
      {
      resultado = resultado + 1
      }
      foreach (subrama in rama)
      {
      resultado = resultado + Funcion_Contar_Hojas(subrama) // recursividad.
      }
      return (resultado)
      }
      En aquellos problemas en los que de entrada tú sabes el nº de bifurcaciones (como en Hanoi, que siempre son 3 torres, o en factoriales, que es una única torre "de bajada"), la recursividad no es la mejor solución para programar por el alto consumo de recursos, en su lugar se utiliza (o debería utilizar) la iteración. Sin embargo, a pesar de que en programación en el mundo real son dos ejemplos en los que la recursividad sería considerada una "mala praxis", son ejemplos que ayudan a entender el concepto de forma muy sencilla.
      pseudo-código para el problema del factorial en iteración
      Funcion_Factorial(numero) // se va a presuponer que el parámetro "numero" siempre va a ser un nº natural (es decir, entero y positivo)
      {
      resultado = 1
      while (numero > 1)
      {
      resultado = resultado * numero
      numero = numero - 1
      }
      return (resultado)
      }

    • @acostamartin1997
      @acostamartin1997 2 года назад

      @@AndreuPinel genial! Muchas gracias por la explicación muy completa

  • @davidhernandeze
    @davidhernandeze 9 лет назад +77

    Respira un poco, algunos no procesamos tan rápido

  • @ax3l03
    @ax3l03 8 лет назад

    una duda, en el pseudocódigo dice que si n=1 se debe de mover de O a A; A es el destino, cierto? buen vídeo, por cierto. :)

    • @makigas
      @makigas  8 лет назад +2

      +Axel Cervantes No, el destino es D. A es Auxiliar. Veo en el subtitulado que no lo menciono. Debería poner alguna nota cuando pueda para que no quede duda.

    • @AndreuPinel
      @AndreuPinel 2 года назад

      @@makigas El caso es que aunque por voz lo explicas bien, en la imagen está mal dado que aparece A y no D, tanto en el "if" como en el "else" (revisa el tramo del vídeo de 3:15 a 3:35 porque en ambas partes de la condición, el movimiento de un único disco es errónea, también en la traducción a pseudo-código). Además, ya como puntilla, añado que la condición la has diseñado como "if (n=1) { a } else { b }", lo cuál entraría en una recursividad incontrolada si en la primera llamada n=0 (o negativo, aunque no tenga sentido). En su lugar yo cambiaría la condición por "if (n>1) { b } else { a }" (se sobreentiende que los métodos apilar/desapilar tienen controlado la casuística de que no haya discos en la torre origen; aunque en cualquier caso no entraría en una recursividad infinita, algo que siempre es peor que un error incontrolado).
      En realidad la mejor solución para mí siempre ha sido: "if (n>0) { b }", sin "else", porque es más limpio y no hay riesgo de error incontrolado en apilar/desapilar, pero a cambio sería ligeramente menos óptimo por entrar dos veces más en el algoritmo cada vez que se llega por n=1 (aunque en ambas es "entrar, no hacer nada, salir", lo cuál sería imperceptible).
      Mover_Varios_Discos (NumDiscos, TO, TD, TA)
      {
      if (NumDiscos > 0)
      {
      Mover_Varios_Discos(NumDiscos - 1, TO, TA, TD)
      Mover_Un_Disco(TO, TD)
      Mover_Varios_Discos(NumDiscos - 1, TA, TD, TO)
      }
      }
      A pesar de mis observaciones (con intención constructiva) aclarar que me ha gustado mucho el vídeo (Like +1), incluso te animo a añadirle dos partes más:
      1) Mostrar porque, a diferencia de con el algoritmo de factorial (donde el recursivo y el iterativo son prácticamente idénticos), el algoritmo recursivo de las torres de Hanoi queda tan elegante. Explicar que esto es dado a que en iterativo el algoritmo tiene que controlar - o encontrar - cuáles son los discos superiores de cada torre, lo que hace que la "lectura humana" del algoritmo sea más difícil ya que uno tiene que saber el patrón de movimientos de la solución. En cambio, con el recursivo la única visión que uno necesita es la global de los 3 movimientos
      * mover todos los discos menos uno de Origen a Auxiliar
      * mover el disco restante de Origen a Destino
      * mover los discos de Auxiliar a Destino.
      2) Mostrar porque en el algoritmo recursivo no funciona la visión global de (aunque a priori parezca más óptimo ya que no habría tanta recursividad)
      * mover disco pequeño de Origen a Auxiliar
      * mover en recursivo el bloque de discos restantes de Origen a Destino
      * mover disco pequeño de Auxiliar a Destino

  • @Pivex10
    @Pivex10 9 лет назад +1

    Genial vídeo. Gracias.

  • @gvetri18
    @gvetri18 9 лет назад +9

    Los memes son lo mejor jajaja.

  • @julioc.rojasa.3757
    @julioc.rojasa.3757 8 лет назад

    Muy bueno el video me ayudó de mucho

  • @troncarl
    @troncarl 8 лет назад

    Me habeis salvado el culo tio,este video es la mera hostia

  • @pjaramayoful
    @pjaramayoful 7 лет назад

    Shiiuuffff que talento para hablar tan rápido y pronunciar bien.

  • @ngry-k7381
    @ngry-k7381 4 года назад

    ni siquiera estoy viendo esto en la u pero ya lo entendi xD bueno almenos en teoria.

  • @EdukalCancunMexico
    @EdukalCancunMexico 7 лет назад +1

    Interesante solucion

  • @Martin-cu9hw
    @Martin-cu9hw 4 года назад

    Bastante Interesante !! =)

  • @lunita6906
    @lunita6906 5 лет назад

    porque n-1?

  • @j0kers814
    @j0kers814 4 года назад

    Graciaas !

  • @xxjjstillxx8709
    @xxjjstillxx8709 4 года назад

    no entendi, el codigo siempre se va a meter en "hanoi" y no va a pasar a las siguientes lineas de codigo

    • @diegonanamejia1510
      @diegonanamejia1510 4 года назад +1

      hasta que llegue al caso base cosa que todas las metidas de hanoi que hubieron detras se resuelven

  • @DrJonesJazzMore
    @DrJonesJazzMore 4 года назад

    buena alexelcapo

  • @laspulguitasfantasticas4117
    @laspulguitasfantasticas4117 3 года назад +1

    👌

  • @zeidadelosreyesrodriguezme9729
    @zeidadelosreyesrodriguezme9729 8 лет назад

    Muy bueno el video jajaja

  • @carlosprocrastianndo
    @carlosprocrastianndo 5 лет назад

    buen video pero el pseudocodigo no esta bien igual gracias ya con eso ya lo pude hacer yo like

  • @julioverne3825
    @julioverne3825 9 лет назад

    Brillante.

  • @TioTIZODioxdelaTiza
    @TioTIZODioxdelaTiza 9 лет назад +2

    Muy interesante :D

  • @luisdavidcastrocoronado4107
    @luisdavidcastrocoronado4107 9 лет назад

    Te Felicito

  • @laniakea1501
    @laniakea1501 3 года назад +1

    aiuda estoy procrastinando :v

  • @primc6962
    @primc6962 7 лет назад

    Eres un Crrrrack

  • @mattiasezekielsayyago3223
    @mattiasezekielsayyago3223 2 года назад

    Interesante. +1like+1sub

  • @horseskull91
    @horseskull91 5 лет назад

    por que "n-1"?

    • @kevin-ff7wz
      @kevin-ff7wz 4 года назад +1

      no viste el ejemplo de las torres de hanoi? primero movio los elementos de arriba -1, ese -1 es el elemente mas grande.

  • @Chemaclass
    @Chemaclass 9 лет назад

    Fabuloso :)

  • @maxiivallejos622
    @maxiivallejos622 7 лет назад

    que wen video!! :')

  • @facusalmini6513
    @facusalmini6513 3 года назад +1

    Ibai, eres tu?

  • @williammoran3921
    @williammoran3921 5 лет назад

    prefiero hacerlo manualmente

  • @anslara89
    @anslara89 7 лет назад +10

    hey habla mas despacio, no todos cpatamos todo a la velicdad de la luz,...me gusta tu método pero no entendemos a esa velocidad....

    • @ClintEsteMadera
      @ClintEsteMadera 7 месяцев назад

      Bajale la velocidad al video, cráneo!

  • @hoswardvilloria7705
    @hoswardvilloria7705 4 года назад

    en 0.25x para entender que carajos es lo que está explicando....

  • @juanfelipelinares7721
    @juanfelipelinares7721 4 года назад

    no entediii

  • @danielgavirialopez4268
    @danielgavirialopez4268 3 месяца назад

    3*3 = 9... 9 - 1 = 8 y no 7 XD

  • @calatiaszone7422
    @calatiaszone7422 2 года назад

    Suena como a ibai xD

    • @makigas
      @makigas  2 года назад

      Curioso, muchas veces han dicho que mi voz es como la de alexelcapo, pero lo de ibai es más nuevo.

  • @soyio5383
    @soyio5383 3 года назад

    wtf parece ibai

  • @brunoeduardovigoparedes4808
    @brunoeduardovigoparedes4808 Год назад

    Pero no resolviste la torre de Hanoi con los 4 discos 😡

  • @jeanb7158
    @jeanb7158 3 года назад

    no me vengas con cuentos

  • @marcus99hd69
    @marcus99hd69 9 лет назад

    english

    • @makigas
      @makigas  9 лет назад +11

      No logro comprender tu comentario.

  • @jose_barreto
    @jose_barreto 5 лет назад +1

    No se te entiende Tío ! lástima...

    • @makigas
      @makigas  5 лет назад

      No pasa nada, he intentado mejorar un poco la manera de narrar desde entonces para hablar más despacio. Igual debería regrabar vídeos como estos en algún momento.

  • @Guss_.1188
    @Guss_.1188 2 месяца назад

    ibai??

  • @juankovac5557
    @juankovac5557 2 года назад

    la basura de pagina que pusiste para el juego no anda

    • @makigas
      @makigas  2 года назад

      Bro el vídeo tiene varios años, lo reviso por si hubiese muerto la web

  • @susper2331
    @susper2331 5 лет назад

    no explicas, sólo repites

    • @makigas
      @makigas  5 лет назад

      Mis cojones en vinagre, pero ok.