Algorithms (optimization problem): find collection of objects whose permutation satisfies criteria
You could formulate this as an instance of integer linear programming.  You use zero-or-one variables $x_{ij}$, with the intended meaning that $x_{ij}=1$ if you assign recipe $i$ on day $j$.  Then your restrictions can be expressed as linear inequalities (e.g., $\sum_i x_{ij}=3$ means you eat 3 meals per day, $\sum_j x_{ij}=1$ means that you eat each recipe once).  You introduce a variable $y$ that expresses how far off from the goals you're allowed to be; then the restrictions on calories and macronutrients are also linear.  Finally, you feed this to an off-the-shelf ILP solver to minimize $y$.

Or, assuming you have three meals per day, you could generate all possible ways to pick a single day's menu that meets the calory requirement for that day, then exhaustively explore all possible ways to combine those daily menus into a week's worth of menus.