gpt4 book ai didi

java - 尝试在 Java 中使用递归创建一个 Htree,无法让它做多个角落

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:14 27 4
gpt4 key购买 nike

我目前正在上 Java 类(class),我们的教授要我们编写一个程序,使用递归来构建一个“Htree”,它只是一个 H,在第一个角的每个角落都有较小的 H,向下层数与用户指定。到目前为止,我已经递归地创建了第一个角,但我似乎无法弄清楚如何更改它以便它可以完成所有四个角。这是我的代码:

package assignment3;

public class Htree {

public static void main(String[] args) {

int SIZE = 512;

// Output and entry take place in the console window

Turtle.create(SIZE, SIZE);

int xCenter = SIZE / 2;
int yCenter = SIZE / 2;

int x = 4;
recursive(xCenter, yCenter, x);
}

private static void recursive(int xCenter, int yCenter, int x) {
int x2 = x - 1;

if (x2 < 0) {
return;
}
int left = xCenter - xCenter / 2;
int right = xCenter + xCenter / 2;
int top = yCenter - yCenter / 2;
int bottom = yCenter + yCenter / 2;
int middle = yCenter;

Turtle.fly(right, middle);
Turtle.go(left, middle);
Turtle.fly(right, top);
Turtle.go(right, bottom);
Turtle.fly(left, top);
Turtle.go(left, bottom);
recursive(left, top, x2);

System.out.println("Done");
}
}

它应该看起来像这样: Htree

如有任何提示,我们将不胜感激。

最佳答案

你的代码就像

    int left = xCenter - xCenter / 2;
int right = xCenter + xCenter / 2;

有问题。假设二级 H 的 X 中心应位于 x=2 和 x=6。对于左手边的 H,您计算左=1,右=3,所以它将是 2 个单位宽。但是对于右手边的 H,您计算左=3,右=9,所以它有 6 个单位宽。结论:您的递归例程需要另一个参数来指定宽度,您可以使用像 left=xCenter-wide/2, right=xCenter+wide/2 这样的公式。

这里是伪代码,用于一种简单的方法来执行四种不同的递归调用(使用 drawH(xCenter, yCenter, wide, deep) 代替您的 recursive(left, top, x2); 函数):

p = q = 1
for i in {1..4}:
drawH(xCenter+p*size/xratio, yCenter+q*size/yratio, wide/2, deep-1)
q = p*q; p = -p;

更正和注释,2016 年 5 月伪代码的最后一行,q = p*q; p = -p;,为四个柱产生 (p, q) 对 {(1, 1), (-1, 1), (1, -1), (-1, -1)} H.

关于java - 尝试在 Java 中使用递归创建一个 Htree,无法让它做多个角落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15536575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com