Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Programação Estruturada / Aula
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.
import java.util.Scanner;
public class ProgramaRecursao1 {
public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);
System.out.println("Digite um número a ser dobrado várias vezes:");
int numero = leitor.nextInt();
System.out.println("Digite um número limite para a operação:");
int limite = leitor.nextInt();
System.out.println(dobrarNumeroAteLimite(numero, limite));
}
public static int dobrarNumeroAteLimite(int numero, int limite) {
int dobro = 2 * numero;
if (dobro >= limite) {
return numero;
} else {
return dobrarNumeroAteLimite(dobro, limite);
}
}
}
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:
import java.util.Scanner;
public class ProgramaIterativoDobra {
public static void main(String[] args) {
Scanner leitor = new Scanner(System.in);
System.out.println("Digite um número a ser dobrado várias vezes:");
int numero = leitor.nextInt();
System.out.println("Digite um número limite para a operação:");
int limite = leitor.nextInt();
System.out.println(dobrarNumeroAteLimite(numero, limite));
}
public static int dobrarNumeroAteLimite(int numero, int limite) {
for (int aux = numero * 2; aux < limite; aux = numero * 2) {
numero = aux;
}
return numero;
}
}
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.
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.
Versão 5.3 - Todos os Direitos reservados