Recursividade

4 respostas
V

Bom galera estou com uma duvida em um código, na linha 20 tem um if ea condição eh que se valorTemp for < menorSugerido,menorSugerido recebe valorTemp,
a minha dúvida eh o valorTemp tem como valor a recursividade??com o vetor, o indice ea posição sugerida??
que me passaram,quem puder me ajudar ficarei grato.

public class Main {

    
    public static void main(String[] args) {
  int arrayValores[] = {3,193,-2,7,4,20,55,-2,99,0,-100};   // Array com os valores
      int posicao = 0;   // Posicao inicial a considerar (primeiro indice do array)
      int sugerido = arrayValores[0];    // Numero sugerido como menor (o primeiro valor do array)

      Main t = new Main();
      System.out.println(t.menor(arrayValores, posicao, sugerido));
   }

      
   // Esta é a função recursiva
   public int menor(int valores[], int pos, int menorSugerido) {
    
      if(pos < valores.length){
         int valorTemp = menor(valores, pos+1, valores[pos]);
         if(valorTemp < menorSugerido) {  
menorSugerido = valorTemp;
         }
      }
      return menorSugerido;
   }

}

4 Respostas

peczenyj

Recursividade é isto aqui:

imagine que vc quer a soma de todos os numeros desde X até 1, ou seja se eu entrar com 3 vc faz 3 + 2 + 1. Como fazer recursivo?

int soma(int x){ int total = 0; if(x != 0) total = x + soma(x-1); return total; }

Vamos ver o que isso faz:

soma(3):

3 != 0 ?? é, então vai retornar 3 + soma(2)

soma(2):

2 != 0 ?? é, então vai retornar 2 + soma(1)

soma(1):

1 != 0 ?? é, então vai retornar 1 + soma(0)

soma(0):

0 != 0 ?? NÃO, então vai retornar 0

Ou seja

soma(1) retorna 1 + soma(0), que é 1 + 0 (ou seja, 1)
soma(2) retorna 2 + soma(1), que é 2 + 1 (ou seja, 3)
soma(3) retorna 3 + soma(2), que é 3 + 3 (ou seja, 6)

a soma de 1 + 2 + 3 é 6, certo? Isto pq eu fiz chamadas recursivas

soma(3) == 3 + soma(2)
soma(3) == 3 + (2 + soma(1))
soma(3) == 3 + (2 + (1 + soma(0)))
soma(3) == 3 + (2 + (1 + 0))

No fim das contas eu invoquei soma com 4 argumentos diferentes empilhados. 3, 2, 1 e 0.

Como isso se aplica ao seu trabalho? Boa pergunta, não entendi bem o que vc quis. Seria bom explicar mais.

V

É assim no if da linha 20 a condição eh se o (valorTemp < menorSugerido) continua o código abaixo certo???
a minha duvida eh a seguinte o (menorSugerido) tem um valor pré determinado, jah o (valorTemp) recebe o metodo recursivo logo acima na linha 19,
no caso entaum a compração seria o valor de (menorSugerido) com o (valorTemp) q teria como valor todo o meu método recursivo??
entendera???

marcosvidolin

Olá…

Recursividade nada mais é do que um metodo chamar ele mesmo.

Sim, nao vale de nada o metodo menor() retornar um valor que nao seja o menor. =]… entao se o valor recebido como retorno de menor() nao for o menor que o sugerido esse valor nao é atribuido. Ou seja o sugerido é menor.

a minha duvida eh a seguinte o (menorSugerido) tem um valor pré determinado, jah o (valorTemp) recebe o metodo recursivo logo acima na linha 19,
no caso entaum a compração seria o valor de (menorSugerido) com o (valorTemp) q teria como valor todo o meu método recursivo??
entendera???

Sim, imagine esse médodo como um loço “for”, por exemplo, que percorre todo um array verificando indice a indece qual o menor valor (o metodo menor chama ele mesmo como um loop para obter o menor valor).

Espero ter ajudado…
Obs.: conheço o cara que fez este código =]
qq duvido posta ai
att

M

Bom, se não conseguiu…

public int menor(int valores[], int pos, int menorSugerido) { if (pos < valores.length) { int num = valores[pos]; if (num < menorSugerido) { menorSugerido = menor(valores, ++pos, num); } else { menorSugerido = menor(valores, ++pos, menorSugerido); } } return menorSugerido; }Boa sorte!

Criado 4 de abril de 2010
Ultima resposta 5 de abr. de 2010
Respostas 4
Participantes 4