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 do argumentooriginal.

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 de procedimentos de recursiva

Condições limitantes. Você deve projetar um recursiva procedimento para teste a pelo menos uma condição que pode terminar a recursão e você também deve manipular o caso onde nenhuma condição 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 executa um alto risco de execução em um loop infinito.

O uso de memória. Seu aplicativo tem uma quantidade limitada de espaço para as variáveis locais. Cada vez que um procedimento chama a mesmo, ele usa mais do que o espaço para cópias adicionais de variáveis locais. Se esse processo continua indefinidamente, eventualmente causa uma 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 desempenhomuito fraco ou até mesmo um loop infinito, se dois procedimentos chamam uns aos outros. Como um design apresenta os mesmos problemas como um único recursiva de procedimento, 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 argumento . Caso contrário, o nome da função será executado como representando o valor retornado da função.

Testes. Se você escrever um procedimentode recursiva, você deve teste ele muito cuidadosamente para certificar-se de que sempre atende a alguma condição de limitação. Você também deve garantir que não possa ser executado fora da memória devido a ter muitas chamadas recursivas.

Consulte também

Tarefas

Solucionando problemas de procedimentos (Visual Basic)

Solucionando problemas de exceções: Exceção 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 de operador (Visual Basic)

Parâmetros e argumentos de procedimento (Visual Basic)

Sobrecarga de procedimento (Visual Basic)

Estruturas de loop (Visual Basic)