Socorro com Recursividade?

2 respostas
rbroz85

Boa tarde amigos,

Estou com problema de logica… entao preferi escrever aqui. pois lendo os posts de voces… talves eu posso abrir minha mente e resolver o problema.
vou explicar…

digamos que temos um uma Tabela “Pessoa” e outra tabela “filho”

e temos:

P1 contem como filhos (P2, P3, P4)
P2 contem como filhos (P3, P4)
P3 contem como filhos (P5)
P4 contem como filhos (P3)

na tabela filhos as chaves ficariam assim:
P1 - P2
P1 - P3
P1 - P4
P2 - P3
P2 - P4
P3 - P5
P4 - P3

gostaria de saber como poderia vericiar a possibilidade de P5 contem filhos (P1)
sei que vai entrar em loop, mas nao to conseguindo criar um algoritmo pra verificar isso pra mim.

a logica seria ???

verificar todos os filhos de P1 para a existencia de P5, se nao achou entao verifica todos os filhos dos filhos de P1 …

seria isso ?

obrigado

2 Respostas

Gerson_da_S_Lima

Cara é mais ou menos isso sim. Eu já fiz algo do tipo.

Verifica os filhos de P1 se tem P5, se os os filhos de P1 tem P5 e assim sucessivamente.

Eu fiz algo do tipo, mas no meu caso eu não procurava se tinha as ocorrências e sim todos os filhos de um pai.

Era algo do tipo:

//ids é o vetor com ids
int[] metodo(int[] ids) {

/*aqui eu percorria cada item do vetor pesquisando no banco, e armazenava em outro vetor os filhos. */

/enquanto tinha filhos eu continuava a chamar esse mesmo método passando os ids que havia encontrado como parâmetro/
metodo(vetorFilhos);

/Se não tinha mais filhos eu retornava a lista com todos os ids/
}

gomesrod

Complementando essa solução que foi dada, vou falar um pouco da sua preocupação de que o programa entre em loop infinito.

Se a árvore não tiver “voltas” para niveis superiores, como essa aqui, então não precisa se preocupar pois não vai entrar em loop, ele vai pesquisar até o final e o máximo que acontece é não encontrar.

|----> B |---> E | | A----|----> C ----|---> F | |----> D

Agora se ela for desse jeito, em que um item pode ser filho de outro que vem mais abaixo (eu entendi que isso pode acontecer no seu caso, se P1 for filho de P5)

|----> B |---> E | | A----|----> C ----|---> F ---> G | | |----> D | | volta p/ A <------------|
Para essa situação, uma possível solução é: Cada vez que analisar um item, por exemplo, (A), adicione-o em uma lista de itens já processados. Quando chegar no item (F), o programa vê que o item A já foi explorado e o ignora, continuando a busca pelo (G).

Criado 17 de setembro de 2009
Ultima resposta 17 de set. de 2009
Respostas 2
Participantes 3