确实,不过倒是没有溢出,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编辑过]
----------------解决方案--------------------------------------------------------
对了,少了一个")",谢谢"开心一科"改正.
----------------解决方案--------------------------------------------------------