Compartilhar via


Procedimentos recursivos (Visual Basic)

A recursiva procedimento é aquele que chama a mesmo. Em geral, isso não é a maneira mais eficiente gravar Visual Basic código.

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

Function factorial(ByVal n As Integer) As Integer 
    If n <= 1 Then 
        Return 1
    Else 
        Return factorial(n - 1) * n
    End If 
End Function

Considerações com procedimentos recursiva

Condições limitantes. Você deve criar um procedimento recursiva para testar a pelo menos uma condição que pode finalizar a recursão e você também deve tratar o caso em que nenhuma dessas condições for satisfeita dentro de um número razoável de chamadas recursivas. Pelo menos uma condição que pode ser atendida sem falha, o seu procedimento é executado um alto risco de execução em um loop infinito.

Uso de memória. Seu aplicativo tem uma quantidade limitada de espaço para as variáveis locais. Sempre que um procedimento chama a mesmo, ele usa muito mais do que o espaço para cópias adicionais de variáveis locais. Se esse processo continua indefinidamente, ele eventualmente causará um StackOverflowException erro.

Eficiência. Quase sempre, você pode substituir um loop de recursão. Um loop não tem a sobrecarga de passando argumentos, Inicializando armazenamento adicional e retornar valores. O desempenho pode ser muito melhor sem chamadas recursivas.

Recursão mútua. Você pode observar um desempenho muito fraco ou até mesmo um loop infinito, se dois procedimentos chamam uns aos outros. Tal um design apresenta os mesmos problemas como um procedimento único recursiva, mas pode ser difícil de detectar e depurar.

Chamando com parênteses. Quando um Function procedimento chama a mesma recursivamente, você deve seguir o nome do procedimento com parênteses, mesmo se não houver nenhuma lista de argumentos. Caso contrário, o nome da função será executado como que representa o valor de retorno da função.

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

Consulte também

Tarefas

Solucionando problemas de procedimentos (Visual Basic)

Exceções de solução de problemas: System.StackOverflowException

Referência

StackOverflowException

Conceitos

Procedimentos no Visual Basic

Subprocedimentos (Visual Basic)

Procedimentos de função (Visual Basic)

Procedimentos de propriedade (Visual Basic)

Procedimentos do operador (Visual Basic)

Parâmetros e argumentos de procedimento (Visual Basic)

Sobrecarga de procedimento (Visual Basic)

Estruturas de loop (Visual Basic)