Dudas sobre Ciclos anidados

W

Buenas Colegas estoy empezando en el mundo de la programacion es posible que alguno pueda explicarme el funcionamiento de los ciclos anidados, necesito entender su comportamiento

DaRkViRuZ

que no entiendes ?


ciclo1{
   ciclo2{
   }
}

entras en ciclo1 y haces tantas veces ciclo2 como tenga asignado ciclo1 no ?

s4suk3

https://es.answers.yahoo.com/question/index?qid=20110712131626AAiWTHS

Wasd

Imagina un bosque.
El bosque tiene X árboles.
Cada árbol tiene Y nidos.
Cada nido tiene Z pájaros.

Supongamos que queremos alimentar a aquellos pájaros que estén hambrientos:

Empezarás recorriendo los árboles del bosque.
Por cada árbol iterarás sus nidos.
Por cada nido iterarás sus pájaros.

Ahí tienes tres bucles anidados.

foreach($forest->getTrees() as $tree) {
  foreach($tree->getNests() as $nest) {
    foreach($nest->getBirds() as $bird) {
      if($bird->isHungry) {
        $bird->feed();
      }
    }
  }
}

Con qué lenguaje quieres aplicarlo? La sintaxis variará y algunos lenguajes te permitirán hacer cosas que otros no.

Haz preguntas más concretas si con lo de arriba no tienes suficiente.

PD: Anidar ciclos se considera código sucio y en ocasiones poco eficiente. Lo de arriba es un ejemplo pero lo suyo sería, al menos, encerrarlo en distintas funciones.

1 1 respuesta
UnLiMiTeD

#4 Estoy empezando en esto de la programacion yo tambien y pensaba que era justo al contrario!, que anidar seria lo "ideal".

1 respuesta
Wasd

#5 Al principio parece lo ideal porque te da mucha flexibilidad y realmente son útiles.

El problema surge cuando prefieres iterar estructuras complejas de datos mediante código en vez de ir a buscarlos directamente a la BD.
Por un lado está el rendimiento. Sin darte cuenta puedes empezar a iterar muchisimas veces y de forma exponencial. Siguiendo el ejemplo de los nidos. En todo el bosque puede que hayan 120.000 pajaros, pero solo 100 estén hambrientos; el 99,9% del esfuerzo computacional habrá sido totalmente en vano.

De la misma forma, qué ocurre si en cualquiera de las iteraciones tienes un error inesperado? Obviamente es mejor siempre tener un buen control de errores, pero bien podría ocurrir que una excepción incontrolada te detenga todo el proceso de iteración.

Otro problema relacionado con esto son las funciones recursivas (funciones que se llaman a si mismas). Pueden ser muy útiles, pero si no sabes muy bien lo que estás haciendo puedes acabar con un bucle infinito que se coma la RAM de tu máquina.

En resumidas cuentas, los bucles anidados molan mucho y son muy útiles, pero antes de hacerlos pregúntate si realmente los necesitas y si no hay alguna otra forma de hacerlos.

1
HeXaN

Se empieza anidando bucles y se acaba teniendo una complejidad de O(n!).

2

Usuarios habituales