Recursão em Java

Aprenderemos a recursão Java com exemplos neste post para que possamos atender às suas necessidades educacionais.

Recursão Java

Java recursão é a técnica de fazer uma chamada de função em si.

O objetivo dessa técnica é simplificar problemas complexos em outros mais simples que possam ser resolvidos facilmente.

Em alguns casos, você pode achar a recursão difícil de entender.

A experimentação é a chave para descobrir como funciona.



Exemplo de Recursão Java

Dois números são fáceis de multiplicar, mas multiplicar um intervalo de números é mais desafiador.

Quando se trata de recursão Java, a multiplicação de um intervalo de números é realizada dividindo-a na simples tarefa de multiplicar dois números.

O exemplo a seguir mostra como multiplicar todos os 10 números naturais a partir de 1, também conhecido como fatorial de 10:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Main {
public static void main(String[] args) {
// Factorial of 10 numbers =10 x 9 x 8 x 7 × 6 × 5 × 4 × 3 × 2 × 1
int mrx = factorial_of_10_numbers(10);
System.out.println(" Result = "+mrx);
}
public static int factorial_of_10_numbers(int ample) {
if (ample > 1) {
return ample * factorial_of_10_numbers(ample1);
} else {
return 1;
}
}
// Output = Result= 3628800
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Saída de exemplo de recursão Java

Exemplo de Explicação:

Usando o método fatorial_of_ten_numbers() , o parâmetro ample é multiplicado pelo produto de todos os números menores que ample e o resultado é retornado como mrx. Quando amplo se torna 1, a função retorna 1. Durante a execução, o programa executa as seguintes etapas:

10 * factorial_of_ten_numbers(9)
10 * ( 9 * factorial_of_ten_numbers(8) )
10 * ( 9 * ( 8 * factorial_of_ten_numbers(7) ) )
…
10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 

Quando amplo é 1, a função não chama a si mesma, então o programa para aí e retorna o resultado.

O exemplo a seguir mostra como somar todos os 15 números naturais a partir de 1:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Main {
public static void main(String[] args) {
// Sum of 20 numbers= 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15
int mrx = sum_of_15_numbers(15);
System.out.println(" Result = "+mrx);
}
public static int sum_of_15_numbers(int ample) {
if (ample > 1) {
return ample + sum_of_15_numbers(ample1);
} else {
return 1;
}
}
// Output = Result= 120
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Exemplo de Explicação:

Usando o método sum_of_15_numbers() , o parâmetro ample é adicionado à soma de todos os números menores que ample e o resultado é retornado como mrx. Quando amplo se torna 1, a função retorna 1. Durante a execução, o programa executa as seguintes etapas:

15 + sum_of_15_numbers(14)
15 + ( 14 + sum_of_15_numbers(13) )
15 + ( 14 + ( 13 + sum_of_15_numbers(12) ) )
…
15 + 14 + 13 + 12 + 11 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1

Quando amplo é 1, a função não chama a si mesma, então o programa para aí e retorna o resultado.


Condição de Parada

A recursão infinita é um problema associado às funções recursivas, assim como o loop infinito é um problema associado aos loops.

Quando uma função chama a si mesma infinitamente, ela é considerada recursão infinita.

As funções recursivas devem ter condições de parada onde possam parar de chamar a si mesmas. Uma condição de parada no exemplo anterior ocorre quando k se torna 1.

O conceito pode ser melhor compreendido vendo uma variedade de exemplos diferentes . Conforme mostrado no exemplo, a função multiplica um intervalo de números entre um início e um fim. End não deve ser maior que start para interromper esta função recursiva.

Usando o exemplo abaixo, você pode usar a recursão para números de produto entre 3 e 8:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Main {
public static void main(String[] args) {
int var_num = product_numbers_between_3_to_8(3, 8);
System.out.println("Result of Product of numbers between 3 and 8: "+var_num);
}
public static int product_numbers_between_3_to_8(int mrx_start, int ample_end) {
if (ample_end > mrx_start) {
return ample_end * product_numbers_between_3_to_8(mrx_start, ample_end1);
} else {
return ample_end;
}
}
// Output: Result of Product of numbers between 3 to 8: 20160
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Abaixo está um exemplo de como a recursão pode ser usada para somar números entre 4 e 9:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Main {
public static void main(String[] args) {
int var_num = add_numbers_between_4_to_9(4, 9);
System.out.println("Result of sum of numbers between 4 and 9: "+var_num);
}
public static int add_numbers_between_4_to_9(int mrx_start, int ample_end) {
if (ample_end > mrx_start) {
return ample_end + add_numbers_between_4_to_9(mrx_start, ample_end1);
} else
return ample_end;
}
// Output: Result of sum of numbers between 4 and 9: 39
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Recursão: Vantagens e Desvantagens

  • Chamadas recursivas alocam novos locais de armazenamento na pilha para variáveis.
  • Cada vez que uma chamada recursiva retorna, as variáveis ​​e parâmetros antigos são removidos da pilha. Como resultado, a recursão geralmente consome mais memória e é mais lenta.
  • Em contraste, as soluções recursivas são muito mais simples de escrever, depurar e manter.

O conceito Java Recursion agora foi explicado para você, então você sabe como tirar proveito dele.

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone