Ir ao conteúdo
  • Cadastre-se

Ajuda com recursividade!


LP0956

Posts recomendados

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.

Link para o comentário
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?

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

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
Link para o comentário
Compartilhar em outros sites

  • mês depois...
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...