Think of each recipe as a node in a dependency graph. If recipe A needs ingredient B, draw an edge from B to A. Supplies are nodes with no incoming edges (they're always available).
Now use topological sort with BFS (Kahn's algorithm). Start by putting all supplies into a queue. For each item you dequeue, check if it's needed by any recipe. Decrease that recipe's "unmet ingredient count" by . When a recipe's count hits , all its ingredients are available, so add it to the queue and mark it as makeable.
Recipes that never reach have at least one missing ingredient or a circular dependency. They can't be made.