Recursividade bleh

4 respostas
R

Olá pessoal, estou tendo um problema grande com recursividade.

O negocio é o seguinte.

Tenho dois objetos da classe. Quando igualo da forma:
ob1 = ob2
Ele pega o mesmo endereço, porem so modifica na variavel e não nas variaveis que apontam para o objeto. :confused:

Alguém sabe o que pode ser?

os atributos são publicos.

4 Respostas

cv1

Nao entendi o seu problema - me parece que o Java esta fazendo exatamente o que vc mandou ele fazer: atribuir a referencia de obj2 a obj1… :slight_smile:

leo_ap

explica um pouco melhor, porque pra mim não ficou muito claro…

blz…

R

Ficou meio confuso mesmo.

Ele está atribuindo a referencia do obj1 ao obj2.
Porem se eu modifico o obj2 ele não altera o obj1 também, mesmo que eles apontem para a mesma referencia #XX

Pelo menos no uso de ponteiros essa logica seria correta, se tratando de endereço de memoria.
Eu gostaria que ao modificar o obj1 ele modifique também o obj2.

Um outro problema que estou tendo é com recursividade. Esse metodo abaixo, não ta correto, mas é apenas pra da um exemplo:

public void inserir(No arv, No aux, boolean cod) {        
        if (cod==true) {
            arv = aux;
        } else {
        if(arv==null)
            arv = aux;
        else
            if(aux.item<arv.item)
                inserir(arv.esq,aux,false);
            else
                if(aux.item>arv.item)
                    inserir(arv.dir,aux,false);
        }
    }

A minha ideia é fazer ele andar na arvore e ir ligando os no etc. Já tentei de varias formas e não consigo isso tambem.

P.S 1: eu tenho esses métodos funcionando sem recursividade, mas gostaria de fazer esse daí funcionar, por não ser proveniente de nenhum livro etc, mas de uma tentativa de adaptação, que é o que venho fazendo no decorrer de um trabalho que estou fazendo.

PS 2: acho que talvez o problema possa estar no fato do metodo nao retornar valor, por isso as variaveis que são passadas como referencia, nao modificam. procede?

Abraços,

R

Pessoal, obrigado aqueles que postaram, mas já consegui fazer o que eu queria.

Acessando sites de outras linguagens, vi um trecho que talvez daria certo, que é passando o nodo esq ou dir para o caminhamento. Porem seria necessario usar o método com retorno, que é algo que já pensava.

Resolvi tentar implementar passando arv.esq e arv.dir recebendo o metodo etc e converter o metodo para um metodo de retorno e deu certo graças a Deus.

Segue abaixo o código de inserção em arvore via recursão:

public No inserir(No arv, int i) {        
        if(arv==null) {
            arv = new No();
            arv.item = i;
        }
        else {
            if(i<arv.item)
                arv.esq = inserir(arv.esq,i);
            else
                if(i>arv.item)
                    arv.dir = inserir(arv.dir,i);
        }
        return arv;
    }

Abraços,

Criado 7 de outubro de 2006
Ultima resposta 7 de out. de 2006
Respostas 4
Participantes 3