Always count on @horsfield to be the first detractor
To explain it in programmatic terms, think of an ingredient as an object and a recipe as an array. In just about every language you can use an array within an array, which is essential when dealing with structured data. Because an ingredient and a recipe are fundamentally the same, I see a natural marriage of concepts here.
I’ll use my own scenario which spawned the idea as an example. I mixed up week’s worth of one version of a recipe, but then I settled on a different version a few days later. Now I have a large batch of powder that will go to waste if I don’t find a way to re-purpose it. So I ended up creating a new ingredient containing the nutritional sum of the old powder mix, that way I could re-balance it by adding things to it. That is when it hit me that it would be much simpler if I could just use the old recipe as an ingredient.
In a hypothetical scenario, say you have a recipe with 4 variants, and you want to quickly swap out ingredients. As it is, you would have to copy the new ingredient to each recipe every time. However, if you put that ingredient in a recipe and then use that recipe as the ingredient in your other recipes, then the changes automatically populate in all recipes linking to it.
In another scenario, say you have a popular recipe like PeopleChow which has a long version history, but you always want a “main” recipe which contains the latest version so that the link you give people never becomes outdated. This change would make it a lot simpler to maintain that placeholder.
It is hard to come up with practical examples from thin air, but hopefully you can see how it would make recipe management a bit more dynamic.