Lógica - for aninhado

Bom dia .

Eu estou estudando a algum tempo e hoje fui ver uns exercícios e na solução de um deles usaram o laço for aninhado.
Esse for aninhado é meu problema já faz tempo. Eu não consigo acompanhar o raciocínio de se usá-lo.

Não sei se o fato de eu ser ansioso me faz ler ele rápido demais, deixando de pensar por partes, sei lá.

Alguém poderia me ajudar por favor?
Eu gostaria de dicas de como proceder, de como ‘pensar’ nesses casos assim.
Sabem de algum material sobre isso que possa me auxiliar?

Essas coisas estão me desanimando e eu admiro demais essa área, não queria desistir.

O seu problema é exatamente sobre esse FOR aninhado? Se for, manda o código que te deixou confuso para podermos ajudar.

Desculpe Lucastody, nem saber expressar minha dúvida eu estou conseguindo, rs.

Assim, vou tentar resumir e tentar deixar mais claro.

1- Em quais situações é recomendado usar for dentro de for?
2- Eu acho que minha ansiedade me faz pensar de forma errada. Para eu ter essa dificuldade imensa nesse código que postei abaixo deve ser por tentar imaginar os valores das vars $i e $j e já querer saber o valor de tudo o tempo todo. Eu não consigo ir pensando por partes, como deveria ser. Eu acho que pode ser isso também o motivo das minhas dificuldades.

Hoje estava assistindo uma live e foi dito não ser recomendado usar for aninhado, para sempre tentar evitar, e eu não entendi o pq disso.

O problema:

  • Programa que escreva de 1 a 100
  • E abaixo de cada número exiba a frase “Contando…” e os 5 próximos números
  • E quando o número da contagem for igual a 7 parar todo o processamento

O código da solução:

<?php
for( $i = 1; $i <= 100; $i++ ){
	echo '<br />' . $i . '<br />' . PHP_EOL;
	echo 'Contando...';
	for( $j = $i + 1; $j <= $i + 5; $j++ ){
		if( $j != $i + 5 ){
			echo $j . ', ';
		} else {
			echo $j;
		}
		if($j == 7){
			break 2;
		}
	}
}
?>

Essa live passou esse problema para ser resolvido e sem usar FOR aninhado? Daí sua dúvida eh sobre o motivo de não ser recomendado usar esse recurso?

Não, não. Esse exercício peguei na internet, quando estava lendo sobre for aninhado.
A live eu só fiz a pergunta do for aninhado, se poderiam dar uma explicação rápida, daí na hora foi dito que não é recomendado usar for aninhado, que sempre que puder evitar, melhor.
Aí fiquei com essa dúvida de em quais situações usar for aninhado

Então, o problema de for aninhado eh o aumento da complexidade no código. Dê uma lida nisso depois: http://www.univasf.edu.br/~marcelo.linder/arquivos_ed1/aulas/aula21.pdf

Um uso que consigo pensar para manipular matrizes, por exemplo.

a ideia do for aninhado é que vc consiga utilizar o valor do for de fora para alguma coisa no for de dentro. A questão da complexidade é assim, se eu tiver 5 ‘Fors’ um dentro do outro contando até 100 cada um o primeiro vai rodar 100x o segundo vai rodar 10.000x o terceiro vai rodar 1.000.000x o quarto 100.000.000x e o quinto 10.000.000.000x.
(Isso gera alta complexidade) complexidade é medido pela quantidade de linhas de código a serem executadas.

for(int i = 0; i < 100;i++{
for(int j= 0; j< 100;j++
for(int k = 0; k< 100;k++{
for(int l = 0; l< 100;l++{
for(int m = 0; m < 100;m++{

}
}
}
}
}

Só reforçando o que o Matheus_Campelo te indicou: a ideia do for aninhado é fazer com que um dos for (o mais interno) seja completado (todas as iterações sejam feitas) a cada iteração (passagem) do for mais externo. Assim, por exemplo se temos algo do tipo:

for(int i = 0; i < 5; i++){
	for(int j = 0; j < 5; j++){
		System.out.println("Item " + i);
	}
}

Nesse caso, haverá 5^2 iterações, ou seja 25 passagens, sendo 5 iterações do for interno (valore de j) para cada iteração do for externo (para cada valor de i) . Em pormenores:

i = 0
j = 0, j = 1, j = 2, j = 3, j= 4

i = 1
j = 0, j = 1, j = 2, j = 3, j= 4

[…]

i = k
j = 0, j = 1, j = 2, j = 3, j= 4

i = 4
j = 0, j = 1, j = 2, j = 3, j= 4

É muito utilizada, por exemplo, para a leitura de vetores bidimensionais (matrizes), sendo (via de regra) o for externo responsável pelas linhas e o for interno pelas colunas, tanto para a leitura de dados (colocar dados na matriz) como também na impressão (extrair/exibir os dados da matriz)
Como se pode ver, na notação “Big-O”, indica-se O(n(ij)) de complexidade, ou seja, um for aninhado, (caso não haja uma flag/sentinela/sinal de parada da repetição) tem complexidade i x j. Por exemplo, se i = 3 ej = 5, portanto n = 15 (15 repetições). Isso no melhor caso. O pior caso é O(n^2), ou seja quando i e j têm o mesmo tamanho, daí gerando uma complexidade quadrada como no exemplo que te apresentei linhas atrás.