2011-06-19 7 views
2

以下の文は再帰ではないことが私に指摘されました。再帰とは、答えが見つかるまで自分自身を呼び出すということです。この再帰は何をするでしょうか?私が持っているコードは再帰ではないと言われました...なぜガイダンスを探していないのですか?

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); 
    } 
} 
} 

答えて

7

totalDistance(...)関数は、(実際に再帰的です...誰もが何が起こっているかに好奇心旺盛である場合には、以下のコード全体で自体)。

+0

+1の最初の正解... 3秒で私を打つ! –

1

は私に再帰のように見えます。誰があなたに言ったのですか?

0

再帰的です。おそらく評論家は反復型(ループ)バージョンにはあまりにも厳密に従っています。

おそらく、最初から最後までリストを通過する代わりに、中央の都市を選び、最初からその都市まで、そしてその都市から最後までの距離を計算し、それを加えたと考えていた可能性があります。距離の各半分は、同じ関数を呼び出すことによって計算されます。

3

再帰 - 彼らが意味するかもしれない(またはあなたが誤解している)ことは、 "尾の再帰"ではないということです。

これは、単純なループに最適化するのは非常に簡単な再帰のサブセットです(ただし、Javaではこれがまだありません)。テール再帰的にするには、再帰呼び出しの結果を返さなければなりません。あなたの場合は、最初にそれを追加します。

関連する問題