Why pass a reference to a local variable: recipe to the calculateCostOfRecipe method. It does not need it to access the Map.

added 9 constructors to take up to 10 ingredients
The constructor should use VarArgs and not expect exactly 3 ingredients.