我正在学习用Java编写代码,我已经学习了java编程的递归部分。我理解了递归方法的基础知识,并且我正在尝试编写填充希尔伯特曲线(和Levy C曲线)的空间,到目前为止,一切都顺利进行,直到实际的递归部分。我在提出递归方法时遇到了麻烦,想知道是否有人可以帮助我。我也知道它需要在DrawHilbert方法中。
public class HilbertCurve extends JPanel {
int N;
/**
* Constructor for Hilbert Curve
*/
public HilbertCurve ()
{
Scanner myKeyboard = new Scanner(System.in);
System.out.println("Enter an integer number to indicate the level of recursive depth: ");
N = myKeyboard.nextInt();
// Create a JFrame - a window that will appear on your screen
JFrame f = new JFrame();
// Tells the program to quit if you close the window
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Puts your drawing into the window (the JFrame)
f.add(new JScrollPane(this));
// Changes the size of the window on the screen
f.setSize(600, 600);
// Changes where the window will appear on your screen
f.setLocation(200, 200);
// Makes the window appear
f.setVisible(true);
}
public void setupHilbert (Turtle turtle)
{
turtle.penup();
turtle.setXY(0,0);
// draw a simple rectangle that is 100x50 pixels
turtle.pendown();
drawHilbert(turtle, N);
}
public void drawHilbert(Turtle turtle, int n) {
if (n == 0) return;
turtle.changeColor(Color.GREEN);
turtle.changeWidth(2);
turtle.left(-90);
turtle.forward(100);
turtle.left(90);
turtle.forward(100);
turtle.left(90);
turtle.forward(100);
turtle.left(-90);
turtle.penup();
}
protected void paintComponent(Graphics g)
{
Turtle turtle = new Turtle((Graphics2D) g, getBounds());
turtle.setHeadingMode(Turtle.DEGREE);
setupHilbert(turtle);
}
// plot a Hilbert curve of order N
public static void main(String[] args)
{
Scanner myKeyboard = new Scanner(System.in);
HilbertCurve test = new HilbertCurve();
}
}
答案 0 :(得分:1)
递归的迹象是一个调用自身的函数。我希望在某处可以看到drawHilbert()
内部的呼叫,但我没有。
密切注意你的停止条件,否则你最终会得到一个OutOfMemoryError,因为你的递归调用将永远添加到堆栈中。
我对你的问题并不熟悉,但这会是你错过的吗?
public void drawHilbert(Turtle turtle, int n) {
if (n == 0) return;
turtle.changeColor(Color.GREEN);
turtle.changeWidth(2);
turtle.left(-90);
turtle.forward(100);
turtle.left(90);
turtle.forward(100);
turtle.left(90);
turtle.forward(100);
turtle.left(-90);
turtle.penup();
drawHilbert(turtle, --n); // is this where your recursion should go?
}
更新:此网站看起来很相关。
http://people.cs.aau.dk/~normark/prog3-03/html/notes/fu-intr-2_themes-hilbert-sec.html