Partilhar via


Procedimentos recursivos (Visual Basic)

Um procedimento recursivo é aquele que se autodenomina. Em geral, essa não é a maneira mais eficaz de escrever código do Visual Basic.

O procedimento a seguir usa a recursão para calcular o fatorial de seu argumento original.

Function Factorial(n As Integer) As Integer
    If n <= 1 Then
        Return 1
    End If
    Return Factorial(n - 1) * n
End Function

Considerações com procedimentos recursivos

Condições limitantes. Você deve projetar um procedimento recursivo para testar pelo menos uma condição que possa encerrar a recursão e também deve lidar com o caso em que nenhuma condição seja satisfeita dentro de um número razoável de chamadas recursivas. Sem pelo menos uma condição que possa ser cumprida sem falhas, seu procedimento corre um alto risco de ser executado em um loop infinito.

Uso de memória. Seu aplicativo tem uma quantidade limitada de espaço para variáveis locais. Cada vez que um procedimento se chama, ele usa mais desse espaço para cópias adicionais de suas variáveis locais. Se este processo continuar indefinidamente, acaba por causar um StackOverflowException erro.

Eficiência. Você quase sempre pode usar um loop em vez de recursão. Um loop não tem a sobrecarga de passar argumentos, inicializar armazenamento adicional e retornar valores. Seu desempenho pode ser muito melhor sem chamadas recursivas.

Recursão Mútua. Você pode observar um desempenho muito ruim, ou até mesmo um loop infinito, se dois procedimentos se chamarem. Tal design apresenta os mesmos problemas que um único procedimento recursivo, mas pode ser mais difícil de detetar e depurar.

Chamando com Parênteses. Quando um Function procedimento se chama recursivamente, você deve seguir o nome do procedimento entre parênteses, mesmo que não haja uma lista de argumentos. Caso contrário, o nome da função é tomado como representando o valor de retorno da função.

Testes. Se você escrever um procedimento recursivo, você deve testá-lo com muito cuidado para se certificar de que ele sempre atende a alguma condição limitante. Você também deve garantir que você não pode ficar sem memória devido a ter muitas chamadas recursivas.

Consulte também