Java 被告知我的代码不是递归的…寻找指导为什么不!

Java 被告知我的代码不是递归的…寻找指导为什么不!,java,recursion,Java,Recursion,有人向我指出,下面的语句不是递归。我认为递归只意味着在找到答案之前它会调用自己。是什么导致了这种递归 public static double totalDistance(int[] x, int[] y, String[] city, int i){ double xSub = x[i] - x[i-1]; double ySub = y[i] - y[i-1]; double distance = Math.pow(xSub, 2) + Math.pow(ySub,

有人向我指出,下面的语句不是递归。我认为递归只意味着在找到答案之前它会调用自己。是什么导致了这种递归

public static double totalDistance(int[] x, int[] y, String[] city, int i){

    double xSub = x[i] - x[i-1];
    double ySub = y[i] - y[i-1];
    double distance = Math.pow(xSub, 2) + Math.pow(ySub, 2);
    distance = Math.round(Math.sqrt(distance));
    System.out.println("Distance From " + city[i] + " to " + city[i-1] + " is " + distance + " miles.");

   if (i == 1){
       return distance;  
   }
   else {
      return distance+totalDistance(x,y,city, i-1);
   }
}

这是下面的全部代码,以防任何人对正在发生的事情感到好奇

import java.util.Scanner;
class distance {


public static void main(String[] args) {

    System.out.println("Welcome to Travel Bliss Distance Calculator!");
    Scanner input = new Scanner(System.in);
    int[] x = new int[5];
    int[] y = new int[5];
    String[] city = new String[5];


    int i=0;
    for (i=0; i < 5;i++){
        System.out.println("Enter City>>");
        city[i] = input.next();
        System.out.println("Enter X Coordinates>>");
        x[i] = input.nextInt();
        System.out.println("Enter Y Coordinates>>");
        y[i] = input.nextInt();
        System.out.println("You Entered: " + city[i] + " with Coordinates: (" + x[i] + "," + y[i] + ") ");


    }
    i = i-1;
    System.out.println("============================================================");

    System.out.println("Calculating Distance Between: " + city[0] +", " + city[1] + ", " + city[2] + ", " + city[3] + ", " + city[4]+" >>>");
    System.out.println("TOTAL of: "+ totalDistance(x, y, city, i)+ " miles.");

}


public static double totalDistance(int[] x, int[] y, String[] city, int i){

    double xSub = x[i] - x[i-1];
    double ySub = y[i] - y[i-1];
    double distance = Math.pow(xSub, 2) + Math.pow(ySub, 2);
    distance = Math.round(Math.sqrt(distance));
    System.out.println("Distance From " + city[i] + " to " + city[i-1] + " is " + distance + " miles.");

   if (i == 1){
       return distance;  
   }
   else {
      return distance+totalDistance(x,y,city, i-1);
   }
}
}
import java.util.Scanner;
班距{
公共静态void main(字符串[]args){
System.out.println(“欢迎使用旅行极乐距离计算器!”);
扫描仪输入=新扫描仪(System.in);
int[]x=新的int[5];
int[]y=新的int[5];
字符串[]城市=新字符串[5];
int i=0;
对于(i=0;i<5;i++){
System.out.println(“输入城市>>”;
city[i]=input.next();
System.out.println(“输入X坐标>>”;
x[i]=input.nextInt();
System.out.println(“输入Y坐标>>”;
y[i]=input.nextInt();
System.out.println(“您输入:“+city[i]+”和坐标:(“+x[i]+”,“+y[i]+”));
}
i=i-1;
System.out.println(“==============================================================================================”);
System.out.println(“计算:“+city[0]+”、“+city[1]+”、“+city[2]+”、“+city[3]+”、“+city[4]+”>>”)之间的距离;
System.out.println(“总计:”+总距离(x,y,city,i)+“英里”);
}
公共静态双总距离(int[]x,int[]y,String[]city,int i){
双xSub=x[i]-x[i-1];
双ySub=y[i]-y[i-1];
双距离=数学功率(xSub,2)+数学功率(ySub,2);
距离=数学圆(数学sqrt(距离));
System.out.println(“从“+city[i]+”到“+city[i-1]+”的距离是“+Distance+”英里”);
如果(i==1){
返回距离;
}
否则{
返回距离+总距离(x,y,城市,i-1);
}
}
}

totalDistance(…)函数确实是递归的(因为它自己调用)。

在我看来像是递归。谁告诉你不是这样的?

它是递归的。可能批评的是,它过于接近迭代(循环)版本

可能当时我们期望的是,不是从头到尾浏览列表,而是选择中间的城市,计算从起点到该城市以及从该城市到终点的距离,然后添加该值。每一半的距离都将通过调用相同的函数来计算。

这是递归——他们可能的意思(或者你误解了)是,这不是“尾部递归”

这是递归的一个子集,很容易优化为一个简单的循环(尽管Java还没有这样做)。要实现尾部递归,您必须返回递归调用的结果——在您的示例中,您首先向其添加