Padrão 3: encolher o vetor
objetivo Olhar o último elemento e passar o resto adiante.
Com , o problema menor é o mesmo vetor com um elemento a menos. Você passa n - 1 e olha o v[n - 1].
O caso base costuma ser n == 0, vetor vazio. O valor devolvido é o neutro da operação: 0 pra soma, 1 pro produto, 1 pra pergunta do tipo todos são.
Quando o enunciado garante pelo menos um elemento, como achar o menor, o caso base vira n == 1 e devolve v[0].
Como a recursão olha de trás pra frente, buscas desse tipo encontram a ÚLTIMA ocorrência, não a primeira.
Onde todo mundo escorrega
- É v[n - 1], nunca v[n]. Com v[n] você lê fora do vetor.
- O vetor passado é sempre o mesmo. Quem diminui é o tamanho.
Desafio
Escreva menorVetor, que devolve o menor elemento de um vetor com pelo menos um elemento.
int menorVetor(int v[], int n)| chamada | saída esperada |
|---|---|
| v = {4, 2, 9, 1, 7}menorVetor(v, 5) | 1 |
| v = {8}menorVetor(v, 1) | 8 |
| v = {-3, 5, -7}menorVetor(v, 3) | -7 |
int menorVetor(int v[], int n) {
// caso base: um elemento so
// compare o ultimo com o menor do resto
}Ctrl+Enter (Cmd+Enter no Mac) roda. Esc sai do editor.
Ver a pilha de chamadas passo a passo
Mostra o que o seu código faz em cada chamada. É uma simulação didática, não substitui o botão de testar.
Dicas
Tenta sozinho primeiro. Travou de verdade, abre a primeira.