前置自增与后置自增(数组倒置)
今天用线性递归写了一段数组倒置的代码,结果提示溢出,源代码如下:
//递归数组反转 public static void inverseArray(int[] arr,int m,int n){ if(m>=n){ return; } int temp=arr[m]; arr[m]=arr[n]; arr[n]=temp; inverseArray(arr,m++,n--); }
调试的时候发现,每次递归时,m和n的值并没有按照预期增减,反倒是保持不变。原因在于:前置自增和后置自增的区别。
前置自增和后置自增:虽然两者都是对操作数加1,但是,前置自增返回加1后的结果,而后置自增的返回值仍然是原操作数。
修改后的程序如下:
public static void inverseArray(int[] arr,int m,int n){ if(m>=n){ return; } int temp=arr[m]; arr[m]=arr[n]; arr[n]=temp; inverseArray(arr,++m,--n); }
为什么是C++,而不是++C。参考:http://www.cnblogs.com/kira2will/p/3550013.html