Java和C中的不同结果在递归中使用=
发布时间:2020-11-14 08:32:16 所属栏目:Java 来源:互联网
导读:如下非常简单的 Java代码具有奇怪的输出,但C和C中的相同逻辑代码具有正确的输出.我尝试使用JDK 1.7和JDK 1.3(相对JRE),奇怪的输出始终存在. public class Test { public static int sum=0; public static int fun(int n) { if (n == 1)
如下非常简单的 Java代码具有奇怪的输出,但C和C中的相同逻辑代码具有正确的输出.我尝试使用JDK 1.7和JDK 1.3(相对JRE),奇怪的输出始终存在. 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)); } } 输出为1,应为8.相对C/C++代码如下: #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; } 添加测试java代码: 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)); } } 解决方法为了给出一个完整的答案,我将通过这个来获得乐趣(3).对于那些不感兴趣的人,为什么这适用于C但不适用于Java,请忽略我的答案.以下是Java正在做的事情: 内心的乐趣(3) sum += sum + fn(n-1) // sum is 0 变 sum = 0 + fun(2) // sum is 0 内心乐趣(2) sum = 0 + fun(1) // sum is 0 内心乐趣(1) return 1 // sum is 0 回到里面的乐趣(2) sum = 0 + 1; // sum is 0 变 sum = 1; // sum will soon become 1 回到里面好玩(3) sum = 0 + 1; // sum is 1 变 sum = 1; // sum gets reset to 1 这是C正在做的事情: 内心的乐趣(3) sum += fn(n-1) // sum is 0 变 sum = sum + fn(2) // sum is 0 内心乐趣(2) sum = sum + fn(1) // sum is 0 内心乐趣(1) return 1 // sum is 0 回到里面的乐趣(2) sum = sum + 1 // sum is 0 变 sum = 0 + 1 => sum = 1 // sum will soon become 1 回到里面好玩(3) sum = sum + 1 // sum is 1 变 sum = 1 + 1 // sum will soon become 2 你应该做什么: int fun(int n) { if (n == 1) return 1; else return n + f(n - 1); } (编辑:大庆站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |