首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

同一个算法写的,为啥C语言和Java的结果不一样

2012-09-06 
同一个算法写的,为什么C语言和Java的结果不一样啊Java codepublic class Test{public static int sum0pu

同一个算法写的,为什么C语言和Java的结果不一样啊

Java code
public class Test{    public static int sum=0;    public static void main(String[] arg)    {            System.out.print(fun(5));    }    public static int fun(int n) {        if (n == 1)            return 1;        else            sum += fun(n - 1);        return sum;    }

C/C++ code
#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程序的结果是1,C程序的结果是8,为什么啊?
我认为结果应该是8,难道Java的写得有问题?

[解决办法]
有意思的问题,尝试了好久(周末都没了),没有解决,后来在 stackoverflow 上发了个帖子询问,终于有了答案。

帖子地址:
http://stackoverflow.com/questions/11813692/java-recursion-bug-i-am-going-crazy/11813707#11813707

就不翻译成中文了,楼主自己看吧,希望楼主可以理解,Good Luck!
[解决办法]
问题还是出在这个表达式上:sum += fun(n - 1);
后面的fun(n-1)在计算时含有sum,算下来成这样的表达式:
sum=sum+++sum+++sum+++sum++;java编译器有自己的计算顺序,它可以在计算之前把sum装入了寄存器,等fun(n-1)返回把结果一加,再存入sum,那结果就离题太远了;
而C编译器也并无规定变量的计算顺序。
这,就是差别。
答案就是将这个语句拆开。else后的语句分拆成这样:
C/C++ code
else{            int i=fun(n-1);            sum +=i;            } 

热点排行