I'm going to run this for fun (3) for the sake of a complete answer. For those who are not interested in why this works for C ++, but not for Java, please ignore my answer.
Here is what Java does:
inside fun (3)
sum += sum + fn(n-1) // sum is 0
becomes
sum = 0 + fun(2) // sum is 0
Then inside fun (2)
sum = 0 + fun(1) // sum is 0
Then inside fun (1)
return 1 // sum is 0
Back inside fun (2)
sum = 0 + 1; // sum is 0
becomes
sum = 1;
Back inside fun (3)
sum = 0 + 1; // sum is 1
becomes
sum = 1; // sum gets reset to 1
Here is what C ++ does:
inside fun (3)
sum += fn(n-1) // sum is 0
becomes
sum = sum + fn(2) // sum is 0
Then inside fun (2)
sum = sum + fn(1) // sum is 0
Then inside fun (1)
return 1 // sum is 0
Back inside fun (2)
sum = sum + 1 // sum is 0
becomes
sum = 0 + 1 => sum = 1
Back inside fun (3)
sum = sum + 1 // sum is 1
becomes
sum = 1 + 1
What you should do: I do not know why C ++ evaluates sum after executing a function call, and not earlier. I do not know if this meets the specifications. But I know that you should not depend on it in any language. The right decision:
int fun(int n) { if (n == 1) return 1; else return n + f(n - 1); }
source share