Foros del Web » Programación para mayores de 30 ;) » Java »

Duda java

Estas en el tema de Duda java en el foro de Java en Foros del Web. Tengo una duda un tanto complicada... tengo una funcion recursiva que es la siguiente: Código: public void ref(int pos){ int aux[]; int N = pixels.length; ...
  #1 (permalink)  
Antiguo 17/06/2009, 13:37
 
Fecha de Ingreso: diciembre-2006
Mensajes: 18
Antigüedad: 17 años, 4 meses
Puntos: 0
Duda java

Tengo una duda un tanto complicada... tengo una funcion recursiva que es la siguiente:

Código:
public void  ref(int pos){
    int aux[];
    int N = pixels.length;

    if(2*pos<N){
        aux = pixels[N-pos-1];
        pixels[N-pos-1] = pixels[pos];
        pixels[pos] = aux;

        ref(pos+1);
        }
    }
La cual hay q implementarla pero sin recursividad osea de forma iterativa la cual deje asi:

Código:
public void ref2(int pos){

    int aux[];
    int N = pixels.length;

    for(int i=0;N>2*pos;i++){
        aux = pixels[N-pos-1];
        pixels[N-pos-1] = pixels[pos];
        pixels[pos] = aux;

        pos++;
    }
Que por logica deberian hacer lo mismo... pero mi duda en verdad es la siguiente... para ver que es lo q hacia el metodo le puse unos println despues de las variables para ver como se comportaban y mi sorpresa fue cuando vi por pantalla lo siguiente:

El valor de pos es:0
El valor de N es:2
El valor de pixels[N-pos-1] es:[Iarroba1888759
El valor de aux es:[Iarroba1888759
El valor de pixels[pos] es:[Iarrobae53108
El valor de pixels[N-pos-1] es:[Iarrobae53108
El valor de aux es:[Iarroba1888759
El valor de pos es:[Iarroba1888759

Lo mas curioso es que esos [Iarroba cambian cada vez que uno ejecuta el programa nuevamente asi que en verdad no se a q corresponden. De verdad estoy muy perdido ojala me entiendan y me puedan ayudar

Salu2!
  #2 (permalink)  
Antiguo 17/06/2009, 13:46
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Duda java

Es que para entender la recursividad primero hay que entender la recirsivodad

Lo que a mi parecer pasa, es que cuando implementas recursividad, cada que vuelves a llamar a la funcion los valores se guardan en una pila y luego va regresando y sacando los vlaores de la pila, entonces lo que te esta mostrando creo que son como las direcciones de memoria

no estoy muy seguro pero creo q si
  #3 (permalink)  
Antiguo 17/06/2009, 14:03
 
Fecha de Ingreso: diciembre-2006
Mensajes: 18
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Duda java

Cita:
Iniciado por drac94 Ver Mensaje
Es que para entender la recursividad primero hay que entender la recirsivodad

Lo que a mi parecer pasa, es que cuando implementas recursividad, cada que vuelves a llamar a la funcion los valores se guardan en una pila y luego va regresando y sacando los vlaores de la pila, entonces lo que te esta mostrando creo que son como las direcciones de memoria

no estoy muy seguro pero creo q si
Si eso mismo pienso yo q son las direccion de memoria pq esta mal implementado el arreglo aux[] y la llamada a la matriz pixels tb... pero entonces el metodo lo q hace es intercambiar direcciones de memoria?

Salu2!
  #4 (permalink)  
Antiguo 17/06/2009, 15:48
 
Fecha de Ingreso: diciembre-2006
Mensajes: 18
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Duda java

Era bien extraño el ejercicio al final no logre entender y lo q hace es cambiar las filas de una matriz osea va subiendo la ultima fila hasta q llega al primer lugar

Salu2!
  #5 (permalink)  
Antiguo 18/06/2009, 07:38
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Duda java

Hola:

aux es un array de enteros. Si escribes System.out.println(aux) te saldrá la dirección de memoria donde está ese array.

Da la impresión de que pixels es una matriz (array de dos dimensiones) y lo que está haciendo este algoritmo es mover las filas completas. Por eso, un system.out.println(pixels[n]) te devuelve la direccion de memoria de esa fila.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:52.