Daniel Andrade Postado Fevereiro 11, 2005 Denunciar Share Postado Fevereiro 11, 2005 Uma funcao recursiva é quando internamente existe uma chamada para a mesma.A funcao executa 999 vezes e apos o return tem que esperar esvaziar a pilha 999 vezes. Como faço para evitar isto? Esta perdendo muito tempoTem como salvar o endereço da primeira chamada e retornar ao primeiro ponto de chamadaEspero a sorte, de ter a resposta aqui Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Fevereiro 13, 2005 Denunciar Share Postado Fevereiro 13, 2005 Mas, e os resultados das outras 998 chamadas? Ainda que na 999 você pudesse voltar para a primeira, provavelmente você ainda não teria o resultado final. Considere a seguinte função para calcular o fatorial de um número:int fat(int n) { if (n==0 || n==1) return 1; else return n*fat(n-1); }Ao calcular o fatorial de 5, por exemplo, na última chamada o retorno seria o 1, e não uma nova chamada, porém todas as chamadas anteriores estariam pendentes esperando suas respectivas chamadas (a primeira espera a segunda, a segunda espera a terceira, a terceira espera a quarta, e assim por diante). Ao "desempilhar" é que o cálculo é feito (uma vez que os valores só são multiplicados após serem "conhecidos"; a primeira chamada fica esperando a segunda retornar algo para poder multiplicar, só que a segunda fica esperando a terceira para poder multiplicar e retornar, e assim por diante). Não sei se sua função faz algo diferente disso, mas se for o caso e se você puder postá-la aqui, creio que ficará mais fácil de ajudar.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Daniel Andrade Postado Fevereiro 14, 2005 Autor Denunciar Share Postado Fevereiro 14, 2005 int *monta_sequencias(int size){ static int inc=0,m=500; //Variavel local retentiva;-não apaga enquanto a funcao manter ativa //chamadas as outras funcoes if(inc==size)return *int; monta_sequencias(size); }Realmente ao esvaziar da pilha vejo toda a sequencia inversas das operaçoes (descrescente) ocorrida com as variveis. Mas o resultado permanece fixo Seria adicionar if(inc==0) salva a pilha e no if do return atualizar a pilha com o valor salvado. Mas o como..., se é possivel, esta a ser descoberto. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Daniel Andrade
Uma funcao recursiva é quando internamente existe uma chamada para a mesma.
A funcao executa 999 vezes e apos o return tem que esperar esvaziar a pilha 999 vezes.
Como faço para evitar isto? Esta perdendo muito tempo
Tem como salvar o endereço da primeira chamada e retornar ao primeiro ponto de chamada
Espero a sorte, de ter a resposta aqui
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.