# A function that returns the highest average from multiple lists of numbers

I have to define a `highestAverage :: [[Int]] -> Double` function that returns the highest average from a list of lists containing numbers.

For example:

`bestAverage [[3,1], [5,4,3], [], [5,5,5], [1,2,3]] == 5.0`

I have already written a function that returns the average of a list.

``````listAverage :: [Int] -> Double
listAverage [] = 0.0
listAverage x = fromIntegral(sum x)/fromIntegral(length x)
``````

My problem is that I can’t figure out a way to have it do recursion. I always get errors when loading in my module.
My code right now looks like this:

``````highestAverage :: [[Int]] -> Double
highestAverage [[]] = 0.0
highestAverage (x:xs) = max(listAverage x, listAverage xs)
``````

### >Solution :

For a non-empty list you call the `groupAvg` on the first sublist `x`, and then determine the `max` between that value, and the recursive call on the tail of the list. The base case is a single sublist where we calculate the maxiumum:

``````highestAverage :: [[Int]] -> Double
highestAverage [x] = listAverage x
highestAverage (x:xs) = max (listAverage x) (highestAverage xs)``````

This function will not work for an empty list. If you want to return `0` for an empty list, you can alter the base case to:

``````highestAverage :: [[Int]] -> Double
highestAverage [] = 0
highestAverage (x:xs) = max (listAverage x) (highestAverage xs)``````