例如定义了一个方法public static int sum(int n),
递归调用时写成return n + sum(n--);运行时为何会出错,而写成 return n + sum (n-1);时运行结果正常?
n--先进行sum(n)之后n-1,陷入死循环,换成--n试试?
--会在运算完成之后对数据进行减操作 而 n-1则直接会对n数据进行减1
问题中n--执行的时候,由于自减运算符--在变量n的后面,所以是先使用变量n,传递给sum(n)然后n再自减1;
假如你最初传入的n=5,那么return n+sum(n--)这句话中传入sum函数的n一直都是5不变,程序肯定执行不完了,就会报溢出错误,此时n的自减已经没有了意义。
自增++和自减--运算符的用法你要弄清楚。
public static int sum(int n){
if(n==0){
return 1;
}
return n + sum(n-1);
}
--若在n前,n值先运算,再运算;若--在n后面,先运算,n值再--。