Recursion can be a powerful programming technique, especially when dealing with mathematical functions such as factorialisation that lend themselves naturally to recursion, or with self-similar data structures. There is a major disadvantage to recursion, however, and that is the amount of memory required to make it work. Do not forget that the program stack grows each time a function call is made. If a function calls itself too many times, your program will run out of memory and crash. Recursive programming can also be difficult; runaway recursion is a common error. Therefore, be judicious in your use of recursion.