Different results in Java and C are used in recursion=
The following very simple java code has strange output, but the same logic code in C and C has the correct output I try to use JDK 1.7 and JDK 1.3 (relative to JRE), and strange output always exists
public class Test {
public static int sum=0;
public static int fun(int n) {
if (n == 1)
return 1;
else
sum += fun(n - 1); // this statement leads to weird output
// { // the following block has right output
// int tmp = fun(n - 1);
// sum += tmp;
// }
return sum;
}
public static void main(String[] arg) {
System.out.print(fun(5));
}
}
Output is 1, should be 8 The relative C / C + + code is as follows:
#include<stdio.h>
int sum=0;
int fun(int n) {
if (n == 1)
return 1;
else
sum += fun(n - 1);
return sum;
}
int main()
{
printf("%d",fun(5));
return 0;
}
Add test Java code:
class A {
public int sum = 0;
public int fun(int n) {
if(n == 1) {
return 1;
} else {
sum += fun(n - 1);
return sum;
}
}
}
public class Test {
public static void main(String arg[]){
A a = new A();
System.out.print(a.fun(5));
}
}
Solution
In order to give a complete answer, I will have fun through this (3) For those who are not interested, why this applies to C but not Java, please ignore my answer
Here's what Java is doing:
Inner pleasure (3)
sum += sum + fn(n-1) // sum is 0
change
sum = 0 + fun(2) // sum is 0
Inner fun (2)
sum = 0 + fun(1) // sum is 0
Inner fun (1)
return 1 // sum is 0
Fun back inside (2)
sum = 0 + 1; // sum is 0
change
sum = 1; // sum will soon become 1
Back inside for fun (3)
sum = 0 + 1; // sum is 1
change
sum = 1; // sum gets reset to 1
This is what C is doing:
Inner pleasure (3)
sum += fn(n-1) // sum is 0
change
sum = sum + fn(2) // sum is 0
Inner fun (2)
sum = sum + fn(1) // sum is 0
Inner fun (1)
return 1 // sum is 0
Fun back inside (2)
sum = sum + 1 // sum is 0
change
sum = 0 + 1 => sum = 1 // sum will soon become 1
Back inside for fun (3)
sum = sum + 1 // sum is 1
change
sum = 1 + 1 // sum will soon become 2
What you should do: I don't know why C evaluates sum after a function call rather than before I don't know if it meets the specifications But I do know that you should not rely on it in any language A correct solution is:
int fun(int n) {
if (n == 1)
return 1;
else
return n + f(n - 1);
}
