Recursão e Loops

JavaBeginner
Pratique Agora

Introdução

Computadores são frequentemente usados para automatizar tarefas repetitivas. Repetir tarefas sem cometer erros é algo que os computadores fazem bem e as pessoas fazem mal. Assim como as expressões condicionais, os loops também podem ser aninhados uns nos outros, mas isso tornará nosso programa difícil de ler e o desempenho não será bom. Tente evitar loops aninhados. Existem três tipos de loops em Java. Vamos aprendê-los um por um neste laboratório.

Conteúdo

Recursão (Recursion) em ciência da computação é uma técnica onde a solução para um problema depende das soluções para instâncias menores do mesmo problema (em oposição à iteração (iteration)). A abordagem é chamada de recursão (recursion) e pode ser aplicada a muitos tipos de problemas. Recursão é uma das ideias centrais da ciência da computação. O poder da recursão reside evidentemente na possibilidade de definir um conjunto infinito de objetos por um número finito de declarações. Da mesma forma, um número infinito de computações pode ser descrito por um programa recursivo finito, mesmo que este programa não contenha repetições explícitas.

Exemplo:

Escreva o seguinte código no arquivo /home/labex/project/recursionTest.java:

public class recursionTest{
    public static int fibonacci(int n){
        if(n<=2){
            return 1;
        }else{
            return fibonacci(n-1)+fibonacci(n-2);
        }
    }
    public static void main(String[] args){
        int res = recursionTest.fibonacci(10);
        System.out.println(res);
    }
}

Saída:

Execute o arquivo recursionTest.java usando os seguintes comandos:

javac /home/labex/project/recursionTest.java
java recursionTest

Veja a saída:

55

Loop While

Ao entrar em um loop while, a condição será verificada primeiro. O loop while sempre será executado até que a condição seja falsa. A sintaxe é assim:

Exemplo:

Escreva o seguinte código no arquivo /home/labex/project/whileTest.java:

public class whileTest
{
    public static void main(String[] args)
    {
        int x = 1;
        // exit when x is bigger than 3, the inner code will run 3 times in all.
        while (x <= 3)
        {
            System.out.println("x = " + x);
            // increment the value of x by 1 each time for next iteration
            x++;
        }
    }
}

Saída:

Execute o arquivo whileTest.java usando os seguintes comandos:

javac /home/labex/project/whileTest.java
java whileTest

Veja a saída:

x = 1
x = 2
x = 3

Loop Do-While

Este loop é muito semelhante ao loop while, mas há uma diferença. Seja qual for o valor da condição, o loop sempre será executado pelo menos uma vez; depois disso, a condição é verificada. Portanto, às vezes pode não ser adequado para algumas circunstâncias. A sintaxe é:

Exemplo:

Escreva o seguinte código no arquivo /home/labex/project/doWhileTest.java:

public class doWhileTest
{
    public static void main(String[] args)
    {
        int x = 1;
        do
        {
            // the code below will run first, then condition is checked.
            System.out.println("x = " + x);
            x++;
        }
        while (x <= 3);
    }
}

Saída:

Execute o arquivo doWhileTest.java usando os seguintes comandos:

javac /home/labex/project/doWhileTest.java
java doWhileTest

Veja a saída:

x = 1
x = 2
x = 3

Loop For

O loop for se parece com isto:

Exemplo:

for (init expression; condition expression; increment expression)
{
    // statements here
}

A expressão de inicialização (init expression), que marca o início de um loop for, será executada apenas uma vez. A expressão condicional (conditional expression) será verificada a cada vez antes de entrar no loop. Ela é usada para testar a condição de saída de um loop e deve retornar um valor booleano. Uma vez que a condição é verdadeira, as instruções no loop são executadas; depois disso, a expressão de incremento (increment expression) será executada para modificar os valores do contador ou outras variáveis para a próxima iteração.

Exemplo:

Escreva o seguinte código no arquivo /home/labex/project/forTest.java:

public class forTest
{
    public static void main(String[] args)
    {
        // for loop begins when x=1 till x<=3
        for (int x = 1; x <= 3; x++) {
            System.out.println("x = " + x);
        }
    }
}

Saída:

Execute o arquivo forTest.java usando os seguintes comandos:

javac /home/labex/project/forTest.java
java forTest

Veja a saída:

x = 1
x = 2
x = 3

Você pode sair do loop sempre que quiser no corpo do loop usando código como continue ou break em um bloco if de instruções. break sairá de todo o loop, enquanto continue apenas interromperá a iteração atual e executará a próxima iteração (se a condição for verdadeira).

Exemplo:

Escreva o seguinte código no arquivo /home/labex/project/loopTest.java:

public class loopTest
{
    public static void main(String[] args)
    {
        // for loop begins when x=1 till x<=3
        for (int x = 1; x <= 3; x++) {
            if(x==2){
                // exit the whole loop
                break;
                // continue will only quit the current iteration, and do next iteration
                // you can delete the break expression and use continue. See the output.
                // continue;
            }
            System.out.println("x = " + x);
        }
    }
}

Saída:

Execute o arquivo loopTest.java usando os seguintes comandos:

javac /home/labex/project/loopTest.java
java loopTest

Veja a saída:

x = 1

Resumo

Neste laboratório, aprendemos três tipos de loops. O loop for e o loop while são fáceis de aprender, enquanto o loop do-while não é muito perfeito logicamente. Você deve escolhê-lo com muito cuidado.