Universidade Federal da Grande Dourados

Sistemas de Informação

Laboratório de Programação II

Programa de Monitoria

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);
        }
    }
}

Voltar