2013-09-25 39 views
0

我知道我忽略了一些非常基本和基本的东西,但我需要帮助创建一个平均函数,只使用一个参数(在这种情况下,包含整数的列表),计算给定整数的平均值。以递归方式保持Java的计数 - 简单

public static double mean (Cons lst) { 
    int total = (Integer) lst.data; 
    int count = //something to keep count through the recursion 

    if(lst.next == null) { 
     return total/count; 
    } 

    else return mean(lst.next); // return statement isn't correct, need help here as well 
} 

任何帮助将是伟大的。如果最简单的解释方法是通过编写方法本身,那么这将是美好的,但我只是想知道如何递归地保持运行计数而不添加参数

非常感谢。

+3

为什么你想程序是递归的?计算int数组的平均值通常是在一个简单的循环中完成的... – isnot2bad

+0

为什么要以递归方式执行此操作? – Kippie

回答

0

您正在开发递归平均函数作为Java类的一个方法。你为什么不声明你的计数和总局部变量作为该类的属性?

class Mean { 

    static int total = 0; 
    static int count = 0; 

    public static double mean (Cons lst) { 
     total += (Integer) lst.data; 
     count += 1; 
     if(lst.next == null) { 
      double ret = total/count; 
      total = 0; 
      count = 0; 
      return ret; 
     } 
     return mean(lst.next); // return statement isn't correct, need help here as well 
    } 
} 

其他选项是将“count”作为递归方法的第二个参数。如果您不希望用户传递更多参数,请使用两种方法:带有一个参数(您的列表)的“mean”方法应该调用包含您的实现的第二种方法“recursiveMean(list,0)”。

public static double mean (Cons lst) { 
    return recursiveMean (lst, 0, 0) 
} 

public static double recursiveMean (Cons lst, int count, int total) { 
    total += (Integer) lst.data; 
    count += 1; 
    if(lst.next == null) { 
     return total/count; 
    } 
    return mean(lst.next,count,total); // return statement isn't correct, need help here as well 
}  

不过,我不明白你为什么要实现平均功能递归函数,除非它是某种形式的教育运动。

+0

谢谢。我试图在没有局部变量的情况下做到这一点,但没有办法。以为我错过了什么,不要猜测。是的,这是一项教育工作。 –