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

Problema con una funcion recursiva -- JDK 6.0

Estas en el tema de Problema con una funcion recursiva -- JDK 6.0 en el foro de Java en Foros del Web. Hola a tod@s y gracias por tomarse el tiempo de leer estoy diseñando un pequeño programa que grafique la curva de koch de manera recursiva ...
  #1 (permalink)  
Antiguo 05/08/2007, 14:55
 
Fecha de Ingreso: agosto-2007
Mensajes: 3
Antigüedad: 16 años, 9 meses
Puntos: 0
Exclamación Problema con una funcion recursiva -- JDK 6.0

Hola a tod@s y gracias por tomarse el tiempo de leer

estoy diseñando un pequeño programa que grafique la curva de koch de manera recursiva pero me encontré con un problema

al compilar eclipse me vota el siguiente error:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError

consulte en la pagina de sun acerca de este bug y dice que es generado por una recursion infinita, pero no he podido hallar la forma en que esa recursion infinita se da.. anexo el codigo para que por fvor me ayuden..

la funcion esta en la clase Koch y se llama kochRecursivo(double, int)..

el objeto de tipo Cursor funciona bien, ya que cuando kochRecursivo recibe como parametro entero un 0, el dibuja la linea que quiero que dibuje... cuando quiero que utilice la recursion... FALLA!!!
************************


import java.awt.*;
import javax.swing.*;

public class Cursor
{
private double x;//refiere a la coordenada en x a graficar
private double y;//refiere a la coordenada en y a graficar
private double angulo;//refiere al angulo de giro representado en gradianes
private Color color; //modifica el color de la grafica
private Graphics g;// objeto que permite graficar

public Cursor ()
{
x=0.0;//inicializacion de las variables en valores válidos
y=0.0;
angulo=0.0;
this.color=Color.black;
}


public void definirInicio(double x,double y,double angulo,Graphics g)
{
//situa el cursor en el origen del plano y brinda la interfaz para graficar
this.x=x;
this.y=y;
this.angulo=angulo*Math.PI/180;
this.g=g;
}

public void CambiarColor(Color color)
{
//funcion que perimiote cambiar el color de la grafica
this.color=color;
}

public void Girar(double angulo)
{
//cambia el angulo del cursor
//recibe grados hexagecimales y los convierte a radianes
this.angulo=angulo*Math.PI/180;

}

public void nuevaPosicion(double x, double y)
{
//coloca el cursor al final de un trazo
this.x=x;
this.y=y;
}

public void trazar(double distancia)
{
//dibuja una linea de un color especifico
//desde la coordenada inicial (x,y) hasta una nueva coordenada
//(coorx,coordy) definida segun la longitud del trazo
double coordx = x + (distancia*Math.cos(angulo));//distancia convertida a abcisa (como si fueran polares)
double coordy = y + (distancia*Math.sin(angulo));//distancia convertida a ordenada (como si fueran polares)
g.setColor(color);//cambio del color
g.drawLine((int)coordx,(int)coordy,(int)x,(int)y);//trazo de la linea
nuevaPosicion(coordx,coordy);//coloca el cursor al final del trazo
}

public void putPixel (double x, double y)
{
g.setColor(color);
g.drawLine((int)x,(int)y,(int)x,(int)y);
}

}
************************************************


import java.awt.*;
import javax.swing.*;


public class Koch extends JFrame
{
Cursor tortuga;

public Koch()
{
tortuga = new Cursor();
setSize(500,500);
setVisible(true);

}

public void paint (Graphics g)
{
super.paint(g);
tortuga.definirInicio(50,250,0,g);
kochRecursivo(300.0,1);

}

public void kochRecursivo(double distancia,int nivel)
{

if(nivel==0)
{
tortuga.trazar(distancia);
}
else
{
kochRecursivo(distancia/3,nivel--);
tortuga.Girar(60);
kochRecursivo(distancia/3,nivel--);
tortuga.Girar(-120);
kochRecursivo(distancia/3,nivel--);
tortuga.Girar(60);
kochRecursivo(distancia/3,nivel--);
}


}

public static void main (String [] args)
{
Koch aplicacion = new Koch();
aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON _CLOSE);
}
}

***********************************************
  #2 (permalink)  
Antiguo 07/08/2007, 09:39
 
Fecha de Ingreso: agosto-2003
Mensajes: 272
Antigüedad: 20 años, 8 meses
Puntos: 0
Re: Problema con una funcion recursiva -- JDK 6.0

El problema es que estas dejando llamadas recursivas pendientes y toda sentencia que quede despues de un llamado recursivo se va a ejecutar y en la condicion de corte pregunta si es igual a cero eso hace que cuando sea negativo siga llamando y como lo que haces es restar a un numero positivo en algun momento se hace cero pero despues menos uno, menos dos etc y a si sucesivamente

yo cambiaria el

if(nivel==0) por un if(nivel>=0)

para que corte al llegar a cero o a un negativo

Saludos espero que te lo solucione.
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 00:04.