如何在递归调用中转换此方法?

问题描述 投票:0回答:1

我有这个方法,我想通过递归调用来转换它。

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[])中,我会记得打印它。

java arrays recursion call point
1个回答
0
投票

首先,递归不如现有方法有效。尤其是当有很多变量需要跟踪时。但这是一种解决方案。

这样称呼它。

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
的初始值是在方法外部计算的,并作为参数传递,以避免在每次方法调用时重新计算它。

© www.soinside.com 2019 - 2024. All rights reserved.