# Java recursion

• February 10th, 2013, 11:48 AM
maple1100
Java recursion
Could someone help me understand this code? Thanks
So the program will print out

"Example 1: x = 20
20 > 10, therefore ... f(20) = f(20 - 3) + 2 = f(17) + 2
17 > 10, therefore ... f(17) = f(17 - 3) + 2 = f(14) + 2
14 > 10, therefore ... f(14) = f(14 - 3) + 2 = f(11) + 2
11 > 10, therefore ... f(11) = f(11 - 3) + 2 = f(8) + 2
8 <= 10, therefore ... f(8) = -5
f(20) = 3
"
How does the computer know to take -5 and + by 8? Thanks

Code :

```class RecursiveMethods { RecursiveMethods() //default constructor { }   public int fOf(int x) { if (x <= 10) //the base case { System.out.println(x + " <= 10, therefore ... f(" + x + ") = -5"); return -5; } else { System.out.println(x + " > 10, therefore ... f(" + x + ") = f(" + x + " - 3) + 2 = f(" + (x -3) + ") + 2"); return fOf(x-3) + 2; } } }   public class RecursionMethodTester { public static void main(String[] args) { int x; RecursiveMethods rMethods = new RecursiveMethods();   System.out.println("---------------------------------"); System.out.println(" f(x - 3) + 2 if x > 10"); System.out.println("f(x) = "); System.out.println(" -5 if x <= 10"); System.out.println("---------------------------------"); System.out.println();   x = 20; System.out.println("Example 1: x = " + x); System.out.println("f(" + x + ") = " + rMethods.fOf(x)); System.out.println();```
• February 10th, 2013, 11:58 AM
Norm
Re: Java recursion
Time to take a piece of paper and pencil and play computer and step through the code statement by statement to see what the computer sees. At each statement write down the values of the variables as they are changed.
• February 10th, 2013, 12:12 PM
maple1100
Re: Java recursion
How can I make the computer display what it the value it seeing? I believe the computer are seeing value of x which are 17, 14,11, and 8.
• February 10th, 2013, 12:21 PM
Norm
Re: Java recursion
Playing computer: For example if the program had this statement:
x = 24;
You would record a value of 24 for x
If later the program had this statement:
x = x + 3;
you would find where you recorded the value of x and add 3 to it making x's new value 27

Quote:

make the computer display what it the value it seeing
Use the println statement:
System.out.println("x="+x); // display the value of x
• February 10th, 2013, 12:39 PM
maple1100
Re: Java recursion
I understand it when it it is replacing the value but what I don't understand is how the program take -5 + 8 without me adding the statement. Does the recursion record the value +2 each time it occur and automatically add it at the end? Thanks
• February 10th, 2013, 12:49 PM
Norm
Re: Java recursion
Can you show the output from the println statements that you added that shows what you are talking about?
Where is the -5 and the +8?
Where is the +2?

Do you understand that each time a method is called a new copy of its args variables is created with new values?
When a method calls another method (or itself recursively) the current values of all its variables are saved. Those variables' values will be restored when execution returns from the called method.
• February 10th, 2013, 01:54 PM
maple1100
Re: Java recursion
I understand how the program work now with your explanation of what happen when a method call itself. Thanks you so much!