Java 如何优化计划中的递归?
我想一个像素一个像素地漫游每一个陆地,但我在法国的更大的国家遇到了堆栈溢出。我如何优化递归Java 如何优化计划中的递归?,java,swing,recursion,Java,Swing,Recursion,我想一个像素一个像素地漫游每一个陆地,但我在法国的更大的国家遇到了堆栈溢出。我如何优化递归 public class Hajra extends JFrame { public int [] xxx={-1,-1,-1,0,1,1,1,0}; public int [] yyy={-1,0,1,1,1,0,1,-1}; public BufferedImage img; public long a,b; public boolean ok =
public class Hajra extends JFrame {
public int [] xxx={-1,-1,-1,0,1,1,1,0};
public int [] yyy={-1,0,1,1,1,0,1,-1};
public BufferedImage img;
public long a,b;
public boolean ok = false;
public int x,y;
Hajra(){
setBounds(50,50,770,609);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);
setContentPane(new JLabel(new ImageIcon("C:/Users/Isti/workspace/preprocess/backgroud.jpg")));
try{
img=ImageIO.read(new File("C:/Users/Isti/workspace/preprocess/backgroud.jpg"));
} catch (IOException t) {
// TODO Auto-generated catch block
t.printStackTrace();
}
this.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
a = img.getRGB(x, y);
if(Math.abs(a)<600000){
bejar(x+15,y+5);}
File f = new File("MyFileee2.png");
try {
ImageIO.write(img, "PNG", f);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
void bejar ( int ujx , int ujy){
for(int i=0;i<8;i++){
///System.out.println( "---"+ ujx + " " + ujy+ " \n");
if(Math.abs(Math.abs(a)-Math.abs(img.getRGB(ujx+xxx[i], ujy+yyy[i])))< 600000 && ujx+xxx[i] <789 && ujx+xxx[i] >10 && ujy+yyy[i] < 630 && ujy+yyy[i]> 10 ){
img.setRGB(ujx, ujy,77);
bejar(ujx+xxx[i], ujy+yyy[i]);
}
}
}
public static void main(String[] args) {
new Hajra();
}
}
图:Java不优化尾部递归,因此您无法真正“优化递归”。您有两个选择: 解决方案1简单 使用以下标志运行程序:-Xss128m这将为堆栈提供128兆内存-因此您的递归具有“更多喘息空间”。如果您的机器有大量内存,您还可以尝试其他值 解决方案2更难
修改算法,使其不是递归的,例如使用堆栈。每个递归算法都可以表示为迭代解您可以通过不使用递归来优化它。考虑使用堆栈。这是什么?XSS128M完全正确。我如何使用它,我如何正确运行,它意味着什么?你能详细阐述一下这个主题吗?当你开始java程序时,说:java -xSS128m。这将应用程序中每个线程的线程堆栈大小配置为您在Eclips或NetBeans how?Eclipse:project->Run As..->中设置的值运行配置->Java应用程序->参数选项卡