Ir ao conteúdo
  • Cadastre-se
LP0956

Ajuda com recursividade!

Recommended Posts

Galera, é o seguinte. Estou estudando recursiva, e testei meu programa de duas maneiras diferentes e nas duas ele fez o proposto.

 

O enunciado do exercício é:

 

 

Enviar a partir do programa principal o valor 1. Calcular a soma dos 100 primeiros números em uma função recursiva e mostrar o resultado no programa principal.

 

 

Fiz ele de duas maneiras, e das duas deu certo.
A primeira:

import javax.swing.JOptionPane;public class recursividade {    public static void main(String args[]){        int num;        num=1;        JOptionPane.showMessageDialog(null, "O valor da soma dos 100 primeiros número e " +FSOMA(num));    }    static int FSOMA(int valor){        int soma;        if(valor==100){            return 100;        }        else{            soma=valor+FSOMA(valor+1);            return soma;        }    }}

A segunda:

import javax.swing.JOptionPane;public class recursividade {    public static void main(String args[]){        int num;        num=1;        JOptionPane.showMessageDialog(null, "O valor da soma dos 100 primeiros número e " +FSOMA(num));    }    static int FSOMA(int valor){        int soma;        if(valor==101){            return 0;        }        else{            soma=valor+FSOMA(valor+1);            return soma;        }    }}

Minha dúvida é justamente essa: por que dos dois jeitos o programa exibiu o resultado 5050 se um está com a condição

if(valor==100){            return 100;}e o outro está com a condiçãoif(valor==101){            return 0;}

Não consigo entender a diferença de o que acontece no primeiro exemplo e o que acontece no segundo. Essa parte ficou muito abstrata pra mim. Nem consigo fazer o teste de mesa disso. Portanto uma ajuda de vocês seria extremamente bem-vinda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

De 1 até 100, retornando 100 no último passo:

1+2+3+...+99+100.

 

De 1 ate 101, retornando 0 no último passo:

1+2+3+...+99+100+0

 

O zero não influencia no cálculo, é apenas um passo a mais na recursividade.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

De 1 até 100, retornando 100 no último passo:

1+2+3+...+99+100.

 

De 1 ate 101, retornando 0 no último passo:

1+2+3+...+99+100+0

 

O zero não influencia no cálculo, é apenas um passo a mais na recursividade.

Então, mas por que se eu coloco

return = 0

ele soma 0 no final e se eu coloco

return = 100

ele não soma mais 100 ao resultado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

:confused:

 

Como assim? Você mesmo disse que o resultado da soma em ambos os métodos é o mesmo!! Se não estivesse somando o 100 o valor seria diferente!!!

 

Se está na dúvida faça o teste de mesa:

 

fsoma(1) com fim em 3 retornando 3

> 1 + fsoma(2)

> 1 + (2 + fsoma(3))

> 1 + (2 + (3))

>> =6

 

fsoma(1) com fim em 4 retornando 0

> 1 + fsoma(2)

> 1 + (2 + fsoma(3))

> 1 + (2 + (3 + fsoma(4)))

> 1 + (2 + (3 + (0)))

>> =6
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

É simples entender, das duas maneiras o programa soma o último resultado que é 100, só que em um você faz com que ele avance para 101 e não some nada, no outro você para em 100 somando os 100 também. Até 100, ambos irão somar o 100, faça o teste de mesa enviando 100 para a função. Num, ele termina a recursividade e começa a retornar, no outro ele ainda faz uma última chamada para testar por 101, mas como esta retornando 0 então a soma fica igual a da outra função.

 

Abs. 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o teste de mesa com 5 elementos ao invés de 100.

if(valor==5){            return 5;}if(valor==6){            return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×