Java和C中的不同结果在递归中使用=
发布时间:2020-05-22 19:39:48 所属栏目: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);
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Java实现批量导入excel表格数据到数据库中的方法
- java – 在RecyclerView中从ViewHolder调用活动?
- java – 为什么这个方法调用失败? (泛型和通配符)
- java – ClassNotFoundException:com.mysql.jdbc.Driver.用
- 基于两列的Java排序
- JavaWeb导出Excel文件并弹出下载框
- java – 任何关于官方GWT MVP框架的教程?
- java – 使用DialogInterface.OnClickListener区分单个Dial
- java – 区分String args []和String [] args
- java – Jenkins的构建被阻止“选项代码:65002”
