Respostas Lista 3 - Recursão
1.
int somaAteN(int n) {
if(n == 1) {
return 1;
} else {
return n + somaAteN(n-1);
}
}
2.
int fatorial(int n) {
if(n == 0) {
return 1;
} else {
return n * fatorial(n-1);
}
}
3.
int potenciaDe2(int n) {
if(n == 0) {
return 1;
} else {
return 2 * potenciaDe2(n-1);
}
}
4.
int potenciaBaseExpoente(int b, int e) {
if(e == 0) {
return 1;
} else {
return b * potenciaBaseExpoente(b, e-1);
}
}
5.
int multiplicacao(int a, int b) {
if(b == 1) {
return a;
} else {
return a + multiplicacao(a, b-1);
}
}
6.
int produtoEscalar(int *vet1, int *vet2, int n) {
if(n == 0) {
return 0;
} else {
printf("%d ", vet1[n-1]);
return vet1[n-1] * vet2[n-1] + produtoEscalar(vet1, vet2, n-1);
}
}
7.
int somatorioFuncao(int n) {
if(n == 0) {
return 0;
} else {
return n*n+3 + somatorioFuncao(n-1);
}
}
8.
float rentabilidade(float capital, float rent, int x_meses) {
if(x_meses == 0) {
return capital;
}
else {
return rentabilidade(capital, rent, x_meses-1) * (1+rent);
}
}
9.
int maior(int *vetor, int inicio, int fim) {
int maior_esquerda;
int maior_direita;
if(inicio == fim) {
return vetor[fim];
}
if(inicio+1 == fim) {
if(vetor[inicio] > vetor[fim]) {
return vetor[inicio];
}
else {
return vetor[fim];
}
}
else {
maior_esquerda = maior(vetor, inicio, (inicio+fim)/2);
maior_direita = maior(vetor, ((inicio+fim)/2)+1, fim);
if(maior_esquerda > maior_direita) {
return maior_esquerda;
}
else {
return maior_direita;
}
}
}
10.
int somaDigitos(int n) {
if(n < 10) {
return n;
}
else {
return n%10 + somaDigitos(n/10);
}
}
11.
int padovan(int n) {
if(n == 0 || n == 1 || n == 2) {
return 1;
}
else {
return padovan(n-2) + padovan(n-3);
}
}
12.
void binario(int n) {
int resto;
int quociente;
if(n == 0) {
return;
}
else{
resto = n%2;
quociente = n/2;
binario(quociente);
printf("%d", resto);
}
}
13.
void inverter(int *vetor, int inicio, int fim) {
int aux;
if(inicio >= fim) {
return;
}
else {
aux = vetor[inicio];
vetor[inicio] = vetor[fim];
vetor[fim] = aux;
inverter(vetor, inicio+1, fim-1);
}
}
14.
int contaElemento(int *vetor, int chave, int n) {
if(n < 0) {
return 0;
}
else {
if(chave == vetor[n]) {
return 1 + contaElemento(vetor, chave, n-1);
}
else {
return contaElemento(vetor, chave, n-1);
}
}
}