Ir ao conteúdo
  • Cadastre-se
Arima

C RESOLVIDO Problemas com a recursividade

Recommended Posts

Ola, boa noite pessoal. vocês poderiam me explicar como funciona a recursividade dessa função?? Ela serve para caminhar por uma arvore binaria e imprimir (esquerda, raiz, esquerda) in order. Mas eu nao entendo como funciona a recursividade dela. E o caminhamento pela direita nao deveria haver um printf tambem?? E o "return", por que esta vazio??

 

void Central(TipoApontador p){
	if(p == NULL) return;
	Central(p−>Esq);
	printf("%ld \n", p−>Reg.Chave);
	Central(p−>Dir);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O return está sem nada porque essa função não retorna nada, ela é do tipo void. No if se o p não existe simplesmente retona sem fazer nada dentro da função.

 

No printf ele não tá imprimindo o p da esquerda nem o da direita, ele tá imprimindo o Reg.Chave do p atual da função. Ele só precisa imprimir o p atual 1 vez, logo não precisa ter outro printf.

 

Mas observe que ele entra em todos a esquerda antes de imprimir qualquer p, logo o primeiro p impresso será o p mais a esquerda possível.

 

Se ainda estiver com dúvida, tente fazer uma árvore pequena num papel e fazer um "teste de mesa".

Compartilhar este post


Link para o post
Compartilhar em outros sites

@isrnick Cara, obrigado pela resposta, mas o que eu nao entendi é na parte recursiva mesmo, como ele vai para a direita na arvore?? Quando ele chega na folha mais a esquerda, como a função verifica as folhas a direita??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele vai entrando a esquerda, até tentar entrar novamente e não existir mais nada, nesse caso ele apenas retorna como mencionei acima, quando retornou ele finalmente imprime o Reg.Chave do último p válido encontrado, e aí entra a direita...

 

Como falei o melhor método pra entender é você fazer o "teste de mesa" no papel para visualizar.

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

×