English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá sobre funções recursivas em Java e suas vantagens e desvantagens.
no Java, chamar a si mesmométodochamado método recursivo. E esse processo é chamado de recursão.
Um exemplo do mundo físico é colocar dois espelhos paralelos um ao lado do outro. Qualquer objeto entre eles será refletido recursivamente.
No exemplo acima, chamamos o método recurse() internamente a partir do método main. (chamada de método normal). E, dentro do método recurse(), chamamos novamente o mesmo método recurse. Isso é uma chamada recursiva.
Para parar as chamadas recursivas, precisamos fornecer algumas condições internamente no método. Senão, o método será chamado infinitamente.
portanto, usamosinstrução if ... else(ou método semelhante)parar a chamada recursiva interna.
class Fatorial { static int fatorial( int n ) { if n != 0 // condição de parada return n * factorial(n-1); //chamada recursiva else retornar 1; } public static void main(String[] args) { int number = 4, result; result = fatorial(number); System.out.println(number + " fatorial de = " + result); } }
saída:
4 fatorial de = 24
No exemplo acima, temos um método chamado factorial(). Chamamos factorial() do método main(). Passamos a variável de número como parâmetro.
Aqui, note as seguintes sentenças:
return n * factorial(n-1);
O método factorial() está chamando a si mesmo. Inicialmente, o valor de n dentro de factorial() é4. Durante a próxima chamada recursiva, será3. Este processo continua até que n seja igual a 0.
Quando n é igual a 0, a sentença if retorna false, portanto, retorna1. Por fim, o resultado acumulado é passado para o método main().
A figura a seguir o ajudará a entender melhor como usar a recursão para executar o programa de fatorial.
Quando se realiza uma chamada recursiva, uma nova posição de armazenamento de variáveis é alocada na pilha. Com o retorno de cada chamada recursiva, as variáveis e parâmetros antigos são removidos da pilha. Portanto, a recursão geralmente consome mais memória e é mais lenta.
Por outro lado, a solução recursiva é muito mais simples e requer menos tempo para escrever, depurar e manter.