Alternativa B - Recursividade Indireta
Análise do Conceito
A questão aborda um dos pilares fundamentais da programação estruturada e algoritmos: os tipos de recursividade.
Recursividade ocorre quando uma função ou subprograma se refere a si mesmo durante sua execução. Existem duas categorias principais:
- Recursividade Direta: Acontece quando uma função chama a si mesma explicitamente.
- Exemplo: Se o subprograma $P$ chama $P$.
- Recursividade Indireta (ou Mútua): Ocorre quando um grupo de funções se chama em cadeia, retornando eventualmente à função original, mas passando por outras funções intermediárias.
- Exemplo: O subprograma $P$ chama $J$, e o subprograma $J$ chama $P$.
Justificativa Didática
No enunciado da questão, temos a seguinte sequência lógica:
- O subprograma $P$ faz uma chamada ao subprograma $J$.
- O subprograma $J$, por sua vez, faz uma chamada ao subprograma $P$.
Isso caracteriza um ciclo de dependência entre dois elementos distintos. Como a chamada não é feita pela própria função imediatamente (o que seria recursividade direta), mas sim através de um terceiro elemento ($J$), definimos isso como recursividade indireta.
As outras alternativas podem ser descartadas pelos seguintes motivos:
- Recursividade direta: Exigiria que $P$ chamasse diretamente $P$.
- Listas (linear/circular): Referem-se a estruturas de dados para armazenamento de informações, e não ao comportamento de chamadas entre funções/subprogramas.
Portanto, a situação descrita é o exemplo clássico de recursividade indireta.