Você está na página 1de 19

problemas recursivos

Prof. Maurício Braga


Exercício

◼ Faça uma função recursiva que receba um vetor


de números inteiros e o seu tamanho e retorne
a soma dos números no vetor.
Solução
public static int somavetor(int v[], int n ) {
if (n == 1)
return v[0];
else
return v[n-1] + somavetor(v, n-1);
}
Exercício
◼ Faça uma função recursiva que some os algarismos
de um número. Ex: se o usuário passar 1985 o
resultado será 1 + 9 + 8 + 5 = 23.
Solução

public static int soma_algarismos(int numero) {

if(numero>10) {
return numero%10 + soma_algarismos(numero/10);
}
else {
return numero;
}
}
Outra solução

public static int somaAlgarismosB(int num, int


somaMomentanea){
if(num<1)
return somaMomentanea;
somaMomentanea+=(num%10);
return somaAlgarismosB(num/10, somaMomentanea);
}
Exercício

◼ Faça uma função recursiva que receba um vetor


de números inteiros e o seu tamanho e retorne
o maior número no vetor.
Solução
int maximo (int v[], int n) {
if (n == 1) return v[0];
else {
int x;
x = maximo(v, n-1);
if ( x > v[n-1] )
return x;
else
return v[n-1];
}
}
Exemplo utilização função máximo
Admita que seja passado para a função recursiva o
vetor = 77 88 66 99
Exercício

◼ Faça uma função recursiva que receba dois números


inteiros x e y (onde x < y) e retorne a soma dos valores
contidos entre x e y (intervalo fechado).

◼ Ex: se o x= 1 e y = 5, a soma será : 1 + 2 + 3 + 4 + 5 =


15
Solução
// REGRA DE USO: x < y.
public static int somaIntervalo(int x, int y) {
if (y == x) {
return x;
}
return somaIntervalo(x, y - 1) + y;
}
Exercício

◼ Faça uma função recursiva que receba dois números e


calcule o MDC (máximo divisor comum) entre eles.

◼ Ex: Os divisores comuns de 12 e 18 são 1,2,3 e 6.


Então, o MDC(12,18) = 6.
Solução

public static int mdc(int num1, int num2) {


if(num2 != 0)
return mdc(num2, num1%num2);
else
return num1;
}
Exercício

◼ Faça uma função recursiva que receba um número


inteiro e imprima esse número de trás para frente.

◼ Ex: Se for passado 2054, será impresso na tela 4502.


Solução
public static void invert(int n) {
if(n==0) {
return;
}
else {
System.out.print(n % 10);
n= n / 10;
invert(n);
}
}
Solução

public static void main(String []args){


System.out.println("Digite um numero:");
Scanner s = new Scanner(System.in);
int numero = s.nextInt();
invert(numero);
}
Exercício

◼ Faça uma função recursiva que determine quantas


vezes um dígito K ocorre em um número natural N.

◼ Ex: o dígito 2 ocorre 3 vezes em 762021192.


Solução

public static int contaNumeros(int n, int valor_a_ser_contado, int i) {


if(n % 10 == k) {
i++;
}
if(n % 10 == n) {
return i;
}
return contaNumeros(n / 10, valor_a_ser_contado, i);
}
problemas recursivos

Prof. Maurício Braga

Você também pode gostar