java中关于 ++ 运算符的问题

例如定义了一个方法public static int sum(int n),
递归调用时写成return n + sum(n--);运行时为何会出错,而写成 return n + sum (n-1);时运行结果正常?

5个回答

n--先进行sum(n)之后n-1,陷入死循环,换成--n试试?

weixin_41148193
强迫症的小懒人 懂了懂了 满分
大约 2 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 正解,就是这个问题。
大约 2 年之前 回复

问题中n--执行的时候,由于自减运算符--在变量n的后面,所以是先使用变量n,传递给sum(n)然后n再自减1;
假如你最初传入的n=5,那么return n+sum(n--)这句话中传入sum函数的n一直都是5不变,程序肯定执行不完了,就会报溢出错误,此时n的自减已经没有了意义。
自增++和自减--运算符的用法你要弄清楚。

qq_35671507
无从追忆 回复强迫症的小懒人: --在前是先赋值再运算,在后是先运算再赋值
大约 2 年之前 回复
weixin_41148193
强迫症的小懒人 那按语法来说sum(n--)不是就等于sum(int n = n--)就等于sum (int n = n =n-1),这样两个赋值运算符也可以?
大约 2 年之前 回复

--会在运算完成之后对数据进行减操作 而 n-1则直接会对n数据进行减1

--若在n前,n值先运算,再运算;若--在n后面,先运算,n值再--。

public static int sum(int n){
if(n==0){
return 1;
}
return n + sum(n-1);
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问