当前位置: 代码迷 >> Java相关 >> 求助,一道面试题
  详细解决方案

求助,一道面试题

热度:176   发布时间:2006-11-27 22:45:57.0

确实,不过倒是没有溢出,unicorn说的是对的, 只是计算了后两项和......


----------------解决方案--------------------------------------------------------
哦,原来如此,是我错了

----------------解决方案--------------------------------------------------------
再请教下
public int sum(int a[],int n){
return n>0?sum(a,n-2)+sum(a,n-1):0;
}

改成这样以后,如果最后分号前面是0,结果是0,如果是其他任何大于0的整数a,结果则是最后两项的和*a,为什么呢?
----------------解决方案--------------------------------------------------------
也就是说即使前面n>0的值为true,最后的返回值也被乘了分号前面的表达式...

手头上能找到的资料中对?:这个运算符介绍的都比较少,茫然中...
----------------解决方案--------------------------------------------------------

boolean ? expA:expB;


的意思也就是

当boolean是true的时候,执行expA,当boolean为false的时候执行expB,就样子的,也就相当 于一个 if else语句


if(boolean){
expA;
}else{

expB;
}


----------------解决方案--------------------------------------------------------

对啊,按说应该是这样的,但是我13楼那段,在n>0为false时能正确执行expB,但是在为true时,执行的结果是expA*expB...


----------------解决方案--------------------------------------------------------

就13楼那个例子,在n>0的时候,改变分号前面的数字,居然会得到不同的结果...而且规律就是倍数关系


----------------解决方案--------------------------------------------------------

这个不是很简单吗?
public int sum(int a[],int n)
{
return n>0?(sum(a,n-1)+a[n-1]):0
}
这是一个三目运算符加一个简单的递归了
相当于:
if(n>0)
{
int sum=0;
if (n>0)
{

for(int i=0;i<n;i++)
{
sum=sum+a[i];
}
return sum;
}
else
{
return 0;
}
}


----------------解决方案--------------------------------------------------------

[此贴子已经被作者于2006-11-28 12:34:58编辑过]


----------------解决方案--------------------------------------------------------

对了,少了一个")",谢谢"开心一科"改正.


----------------解决方案--------------------------------------------------------
  相关解决方案