我有这个方法,我想通过递归调用来转换它。
public double findDeltaL(Point[] pl) {
double delta = Math.sqrt(Math.pow(FTCPPanel.WIDTH, 2) + Math.pow(FTCPPanel.HEIGHT, 2));
double delta1;
for (int j = 0; j < pl.length; j++) {
for (int i = j + 1; i < pl.length; i++) {
double x12 = pl[j].getX() - pl[i].getX();
double y12 = pl[j].getY() - pl[i].getY();
delta1 = Math.sqrt(Math.pow(x12, 2) + Math.pow(y12, 2));
if (delta >= delta1) {
delta = delta1;
this.cp1[0] = pl[i];
this.cp1[1] = pl[j];
}
}
}
return delta;
}
此方法采用点数组并计算两点之间的短距离 (delta)。
然后将这对点放入一个新数组(cp[])中,我会记得打印它。
首先,递归不如现有方法有效。尤其是当有很多变量需要跟踪时。但这是一种解决方案。
这样称呼它。
ftc.findDeltaLRecurse(pl, 0, delta);
public double findDeltaLRecurse(Point[] pl, int next,
double delta) {
if (next < pl.length) {
for (int i = next + 1; i < pl.length; i++) {
double x12 = pl[next].getX() - pl[i].getX();
double y12 = pl[next].getY() - pl[i].getY();
double delta1 = Math.sqrt(Math.pow(x12, 2) + Math.pow(y12, 2));
if (delta >= delta1) {
delta = delta1;
this.cp1[0] = pl[i];
this.cp1[1] = pl[next];
return findDeltaLRecurse(pl, next + 1,
delta);
}
}
}
return delta;
}
请注意,
delta
的初始值是在方法外部计算的,并作为参数传递,以避免在每次方法调用时重新计算它。