Alternativa D
A questão solicita a implementação de um subprograma recursivo capaz de calcular o somatório dos inteiros no intervalo [1, N]. Para identificar a resposta correta, devemos analisar quais opções atendem simultaneamente à lógica matemática da soma e ao conceito de recursividade.
Análise da Solução
Para resolver o problema, a função deve seguir a fórmula de recorrência da soma aritmética: S_n = n + S_{n-1}. Além disso, ela precisa de uma condição de parada (caso base) para evitar um loop infinito.
Vamos examinar cada alternativa conforme solicitado:
- Opção A: Apresenta a chamada
retorna(n + SOMA(n-2)). Ao subtrair 2 de n a cada chamada, a função pula números inteiros consecutivos (somaria apenas ímpares ou pares, dependendo do valor inicial), falhando no requisito de somar todos os números do intervalo. - Opções B e C: Ambas utilizam a estrutura de repetição
para ... faça ... fimpara. Embora calculassem a soma corretamente em muitos casos, elas são implementações iterativas, não recursivas, violando o requisito explícito do enunciado. - Opção D: É a única que combina a estrutura recursiva com a lógica correta:
- Caso Base:
se n = 0 então retorna (0). Interrompe a execução quando chega ao zero. - Passo Recursivo:
retorna(n + SOMA(n-1)). Acumula o valor atual n com o resultado da soma anterior.
Demonstração Lógica
Na Opção D, ao chamar a função com N=3, a execução ocorre da seguinte forma:
- Chamada inicial:
SOMA(3) - Retorna: $3 + \text{SOMA}(2)$
- Retorna: $3 + 2 + \text{SOMA}(1)$
- Retorna: $3 + 2 + 1 + \text{SOMA}(0)$
- Retorna: $3 + 2 + 1 + 0 = 6$
Isso confirma que a lógica de acumulação está correta e a estrutura é recursiva.
Alternativa D