【问题标题】:java turtle recursionjava乌龟递归
【发布时间】:2012-11-07 17:45:42
【问题描述】:

我需要写一个把T画成圆圈的方法。

int s= T 的长度 int c= 要绘制的 T 的数量和每个 T 转动的度数

这是我的代码:

public static void r(int s,int c)
    {

        t.penDown();
        t.forward(s/2);
        t.left(90);
        t.forward(s/4);
        t.right(180);
        t.forward((s/4)*2);
        t.right(180);
        t.forward(s/4);
        t.left(90);
        t.forward(s/2);
        t.left(360/c);


    }

int s = 行长 int c= 要绘制的 T 的数量(以及每次转动的度数)

画的是:一个4圈的T 这个方法是递归调用的,我找不到这个方法的任何停止条件 因为 int c 参数可以改变,因为它是转弯的角度,但它需要改变,因为那是我的停止参数。

有什么帮助吗?

【问题讨论】:

  • 为什么不使用循环来调用 r() 一个固定的数字或次数?

标签: java recursion turtle-graphics


【解决方案1】:

假设您的解释是您试图避免更改r() 的参数,您可以使用内部类的递归方法来解决此问题:

public static void r(Turtle t, int s, int c) {

    class InnerClass {

        private void r_recursive(Turtle t, int s, int c, int m) {
            if (m == 0) {
                return;
            }

            t.penDown();

            t.forward(s / 2);
            t.left(90);
            t.forward(s / 4);
            t.right(180);
            t.forward(s / 2);
            t.right(180);
            t.forward(s / 4);
            t.right(90);
            t.backward(s / 2);

            t.penUp();
            t.left(c);

            r_recursive(t, s, c, m - c);
        }
    }

    new InnerClass().r_recursive(t, s, c, 360);
}

通过调用:

Turtle bob = new Turtle();

r(bob, 200, 30);

你应该得到:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2023-03-28
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多