Ir para conteúdo
Fórum Script Brasil
  • 0

Funcao Recursiva


Daniel Andrade

Pergunta

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

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...