While studying recursion, I came to know that for every function call it has to store intermediate data on stack for later use. If so, then for large amount of data, recursion can be inefficient. Storing large intermediate data can cause memory overflow. Can you please explain, then why recursion is used at all? If possible, can you please provide one practical application of recursion.