2016-02-13 83 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循环。

富有创意。