**Recursion**

Java support recourse Recursion is the process of defining something in terms of

itself. As it relates to Java programming. recursion is the attribute that allows a method to call itself. A method that calls itself is said to be recursive. The classic example of recursion is the computation of the factorial of a number. The factorial of a number N is the product of all the whole numbers between 1 and N. for example, 3 factorial is 1 x 2x 3, or 6. Here is how a factorial can be computed by use of a recursive method:

If you are unfamiliar with recursive methods, the the operation of fact( ) may , seem a bit confusing. Here is how it works. Whenis called with an argument o'f 1, the function returns 1;otherwise it returns the product of To evaluate this expression, ) is called with n-1. This process repeats 'until n equals and the calls to the method begin returning. To better understand how the method works, let's go through a short example. When you compute thefactorial of 3, the first call to fade ) will cause it .second call to be made with an argument of 2. This invocation.will cause fad( ) to be , called n third time-with an argument of 1. This call will return 1, which is then ,multiplied by 2 (the value of n in-the second invocation). T his result (which is 2) is thenreturned to .the original invocation of fade ) and multiplied by'3 (the original value of n ). This yields' the answer, 6. You might find it interesting to insert print lnstatements into factl ) which will show at what level each call is and what the' intermediate answers are. When a method calls itself, new local variables a~d parameters are allocated storage on the stack, and the method, code is executed with these new variables from the start. A recursive call does not make a new copy of the method. Only the arguments are new~ As each recursive call returns, the old local variables and , parameters are removed from the stack, and execution resumes at the point of the call inside the method. Recursive-methods could be said to "telescope" ouj and back. Recursive versions of many routines may-execute a bit more slowly than the . iterative equivalent because of the added overhead of the additional function calls. 'Many recursive calls to a method could cause.a stack overrun, Because storage for parameters and local variables is on the stack and each new call creates a new copy of these variables; it i!'possible that the stack could be exhausted, If this occurs, the Java, run-time system cause an exception. However, you probably will not have to worry about this unless a recursive routiae runs wild.The main advantage to recursive methods is that they can be used to create clear rand versions of several algorithms than can their iterative relatives. For example, the QuickSort sorting algorithm is quite difficult to implement.in an iterative way. Some problems, especially Al-related ones, seem to lend themselves to recursive solutions! Finally, some-people to think recursively more easily than alliteratively. When writing recursive methods, you mus: have an if statement somewhere to. force the method to return without the recur-we call being executed. If you don't do this, This is a very common error In working with recursion. use print ln'() statements liberally during development so that.