Recursivamente…
Eu fiz isso daqui mas deu StackOverFlow… Alguém sabe dizer se pelo menos está certo(tirando a exceção) que deu, e como resolver? Preciso só calcular os termos, recebendo como parâmetro o primeiro termo, a quantidade de número e a razão da PA.
Isso era pra ser a soma? Se for está errada… está dando StackOverFlow porque entrou em um loop infinito, para corrigir o StackOverFlow você deve usar ‘–n’ ao invés de ‘n–’
A
alvespintoandre
Coloque --n
E
entanglement
De qualquer forma, o Java não é muito bom para calcular métodos recursivos se a profundidade da recursividade exceder cerca de 10.000, a menos que você ajuste o parâmetro -Xss.
Mas acho que você não usou n = 10000, certo?
jeffev
entanglement:
De qualquer forma, o Java não é muito bom para calcular métodos recursivos se a profundidade da recursividade exceder cerca de 10.000, a menos que você ajuste o parâmetro -Xss.
Mas acho que você não usou n = 10000, certo?
Bom saber disso!!!
freakazoid
DICA: sempre quando vamos fazer algum método recursivo a primeira coisa é estabelecer uma condição de parada, que no seu caso é:
if(i==n){
return1;
}
Porem existem 2 problemas: o primeiro é que vc em nenhum momento esta incrementando o seu contador i. O segundo é que desta forma sempre quando o método recursivo for chamado, i terá valor 0, isso justifica o java.lang.StackOverflowError!
Uma das soluções é vc colocar o seu contado como parâmetro do seu método e incrementá-lo na chamada recursiva.
Estero que tenha ajudado.
Abs!
sergiotaborda
entanglement:
De qualquer forma, o Java não é muito bom para calcular métodos recursivos se a profundidade da recursividade exceder cerca de 10.000, a menos que você ajuste o parâmetro -Xss.
Mas acho que você não usou n = 10000, certo?
É. como já conversámos em outras threads recursividade é uma coisa a se evitar. Todo o mundo acha que é oitava maravilha, mas não é. Um for é muito melhor.
Existem linguagens como o scala que transforma recursividade em for ( tail recursion) , mas não é o caso do java. Então sempre tente usar for em vez de recurcividade.Em alguns casos é necessário um stack para conseguir o mesmo objetivo com o for.
S
Steam
freakazoid:
DICA: sempre quando vamos fazer algum método recursivo a primeira coisa é estabelecer uma condição de parada, que no seu caso é:
if(i==n){
return1;
}
Porem existem 2 problemas: o primeiro é que vc em nenhum momento esta incrementando o seu contador i. O segundo é que desta forma sempre quando o método recursivo for chamado, i terá valor 0, isso justifica o java.lang.StackOverflowError!
Uma das soluções é vc colocar o seu contado como parâmetro do seu método e incrementá-lo na chamada recursiva.
Estero que tenha ajudado.
Abs!
Eu fiz oq disseram acima de botar --n funcionou tudo normal agora, nem precisou mecher no i, pq será?
Outra coisa, a somatá ok, mas como faço agora para mostrar todos os números da PA?
freakazoid
Steam:
freakazoid:
DICA: sempre quando vamos fazer algum método recursivo a primeira coisa é estabelecer uma condição de parada, que no seu caso é:
if(i==n){
return1;
}
Porem existem 2 problemas: o primeiro é que vc em nenhum momento esta incrementando o seu contador i. O segundo é que desta forma sempre quando o método recursivo for chamado, i terá valor 0, isso justifica o java.lang.StackOverflowError!
Uma das soluções é vc colocar o seu contado como parâmetro do seu método e incrementá-lo na chamada recursiva.
Estero que tenha ajudado.
Abs!
Eu fiz oq disseram acima de botar --n funcionou tudo normal agora, nem precisou mecher no i, pq será?
Outra coisa, a somatá ok, mas como faço agora para mostrar todos os números da PA?
Não sei para qual a finalidade vc precisa disso, mas se for apenas exibir a sequencia:
Você pode usar o System.out.println(); dentro do seu método ou alterar o seu método para retornar uma String com o cálculo da sua PA, depois vc pode fazer o que vc quiser com a String.
Vc pode passar as informações para sua página web tbm, mas, vc precisa definir se vai usar JSP ou JSF.
Rodrigo_Sasaki
sergiotaborda:
É. como já conversámos em outras threads recursividade é uma coisa a se evitar. Todo o mundo acha que é oitava maravilha, mas não é. Um for é muito melhor.
Existem linguagens como o scala que transforma recursividade em for ( tail recursion) , mas não é o caso do java. Então sempre tente usar for em vez de recurcividade.Em alguns casos é necessário um stack para conseguir o mesmo objetivo com o for.
E ainda depende, para otimizar para tail recursion tem que estar implementado dessa forma. É meio óbvio, mas achei melhor comentar
marcos.after
alvespintoandre:
Você pode usar o System.out.println(); dentro do seu método ou alterar o seu método para retornar uma String com o cálculo da sua PA, depois vc pode fazer o que vc quiser com a String.
Creio que ele quer todos os números contidos na PA, então não seria mais viável utilizar um array para armazenar essa coleção de números para depois imprimir com System.out.println(); ?
freakazoid
inicialmente eu pensei num array mas seria chato pra caramba passar esse cara de parâmetro na recursão…ou não neh?! depende da logica.
achei mais interessante com String.