2016-02-13 104 views
0

我是遞歸中的新人,有人請賜教。轉換爲遞歸方法

的問題是:

找同學的測驗平均品位與#101「

我已經在使用迭代解決這個問題,但我不知道如何轉換。成遞歸

import java.io.*; 
import java.util.*; 

public class Test{ 
    public static void main(String[] args) throws IOException{ 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     Scanner sc = new Scanner(System.in); 

     String arr[][] = {{"101","Quiz","90"},{"101","CS","80"},{"102","Quiz","85"},{"101","Quiz","75"},{"103","CS","84"},{"101","Quiz","87"}}; 
     int sum = 0; 
     int ave = 0; 
     System.out.println("Student #\tType\tGrade"); 
     for(int ctr = 0; ctr<arr.length; ctr++){ 
      System.out.println(arr[ctr][0]+"\t\t"+arr[ctr][1]+"\t"+arr[ctr][2]); 

      if(arr[ctr][0] == "101"){ 
       if(arr[ctr][1] == "Quiz"){ 
        sum += Integer.parseInt(arr[ctr][2]); 
        ave += 1; 
       } 
      } 

     } 
     System.out.println("The Average quiz of Student # 101 is: "+ sum/ave); 


    } 



} 
+1

雖然這個'if(arr [ctr] [1] ==「Quiz」)'因爲你比較文字,所以如果你用'=='來比較從用戶讀取的字符串,你會感到不快。請閱讀[「我如何比較Java中的字符串?」](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java)。 – Pshemo

+0

@Pshemo好的。經典的java gotchya。 –

+1

您可能想研究可以找到的主題的現有帖子https://www.bing.com/search?q=java+convert+loop+to+recursion。一些帖子甚至有解釋(除了一些理論文章,如https://secweb.cs.odu.edu/~zeil/cs361/web/website/Lectures/recursionConversion/page/recursionConversion.html,但你應該已經瞭解一般方法)。 –

回答

0

你可以做這樣的事情,我不認爲這是優雅/實用/好的做法,但:。

public int[] recursiveAverage(String array[][], int i){ 
    if (i < array.length) 
    { 
     int[] previousAverage = recursiveAverage(array, i + 1); 
    } 
    else 
    { 
     int[] previousAverage = {0, 0}; 
    } 

    if (array[i][0] == "101" && array[i][1] == "Quiz") 
    { 
     previousAverage[0] = Integer.parseInt(array[i][2]); 
     ++previousAverage[1]; 
    } 

    return previousAverage; 
} 

然後你會將previousAverage[0]除以previousAverage[1]得到實際的平均值。 這實際上是您的迭代函數,用遞歸替換for循環。

富有創意。