Reputation: 692
I have a problem with numbers that I want to increment using a recursive function. The function didn't return the value as I was expecting. Upon debugging I saw the numbers being increased but when the value is returned, it appears that the adjustments to the numbers are returned in reverse order.
Here is a simple example:
private static int recursionTest(int num){
if (num < 10){
recursionTest(++num);
}
return num;
}
public static void main(String[] args) {
System.out.println(recursionTest(1));
}
The output is always 2. When I'm using the step-through debugger I see the following:
Why is the value being decremented in the end, and how do I return the initially calculated value?
Upvotes: 4
Views: 16728
Reputation: 59
private static int recursionTest(int num){
while(num < 10){
recursionTest(++num);
if(num < 10){
break;
}
}
return num;
}
Above snippet will iterate while loop 10 times only so it will be fast.
Upvotes: -2
Reputation: 7692
Try this, use end condition explicitly:
int recursionTest(int num) {
if(num == 10){ //recursion exit condition
return num;
}
return recursionTest(++num);
}
Upvotes: 0
Reputation: 1303
Your problem is that you must return the recursive calling, not the number. If you do so you are going to obtain always your initial value + 1.
Solution:
private static int recursionTest(int num){
if(num < 10){
return recursionTest(num + 1);
}
return num;
}
Upvotes: 1
Reputation: 843
This is because you're still returning num
instead of the result of your recursive function.
private static int recursionTest(int num){
if (num < 10){
return recursionTest(++num);
}
return num;
}
Upvotes: 2
Reputation: 5092
It should be like this:
private static int recursionTest(int num){
if (num < 10){
return recursionTest(++num);
}
else
return num;
}
Upvotes: 12