3. Uso da Recursão ou da Iteração (laços)

Como dito anteriormente, a recursão é uma técnica poderosa para os programadores. Entretanto, ela não deve ser considerada um substituto da iteração. Isso porque nem sempre está claro se a recursão é a melhor opção de implementação para uma função ou procedimento. De fato, às vezes a implementação mais fácil de uma solução é a iterativa, usando-se for ou while.

Observe o código do programa mostrado a seguir.

x
1
import java.util.Scanner;
2
3
public class ProgramaRecursao1 { 
4
    public static void main(String[] args) { 
5
        Scanner leitor = new Scanner(System.in); 
6
        System.out.println("Digite um número a ser dobrado várias vezes:"); 
7
        int numero = leitor.nextInt(); 
8
        System.out.println("Digite um número limite para a operação:"); 
9
        int limite = leitor.nextInt(); 
10
        System.out.println(dobrarNumeroAteLimite(numero, limite)); 
11
    }
12
13
    public static int dobrarNumeroAteLimite(int numero, int limite) { 
14
        int dobro = 2 * numero; 
15
        if (dobro >= limite) { 
16
            return numero; 
17
        } else { 
18
            return dobrarNumeroAteLimite(dobro, limite); 
19
        } 
20
    } 
21
}

Você consegue perceber o que esse código faz? Veja que são lidos dois números, um primeiro (variável numero), que representa um número a ser dobrado, ou seja, multiplicado por dois, e um segundo (variável limite), que indica o valor máximo. Veja a seguir a versão desse programa de forma iterativa, usando o for:

19
1
import java.util.Scanner;
2
3
public class ProgramaIterativoDobra { 
4
    public static void main(String[] args) { 
5
        Scanner leitor = new Scanner(System.in); 
6
        System.out.println("Digite um número a ser dobrado várias vezes:"); 
7
        int numero = leitor.nextInt(); 
8
        System.out.println("Digite um número limite para a operação:"); 
9
        int limite = leitor.nextInt(); 
10
        System.out.println(dobrarNumeroAteLimite(numero, limite)); 
11
    }
12
13
    public static int dobrarNumeroAteLimite(int numero, int limite) { 
14
        for (int aux = numero * 2; aux < limite; aux = numero * 2) { 
15
            numero = aux; 
16
        } 
17
        return numero; 
18
    } 
19
}

No ProgramaIterativoDobra, existe uma variável auxiliar que fica recebendo em cada laço o dobro do valor da variável número. Enquanto esse valor não ultrapassar o valor limite, a variável número vai sendo atualizada, sendo seu valor retornado ao final da execução da função.

play_circle_filled
Vídeo 05 - Loop Controlado

Qual das duas versões do programa você acha mais interessante? Em termos de facilidade de entendimento do código, acreditamos que a versão recursiva é mais fácil de entender. Entretanto, a implementação de forma iterativa também é uma boa solução, cujo entendimento também é simples. Nesses casos, geralmente o que conta é a forma de pensar do programador. Quem tem mais facilidade com programação recursiva geralmente tende a usar mais recursão. Já quem tem mais facilidade com iteração, tende a programar mais com laços do que com recursão. O mais importante é você conhecer e saber utilizar as duas abordagens.

play_circle_filled
Vídeo 06 - Fibonnaci

Versão 5.3 - Todos os Direitos reservados