今天用线性递归写了一段数组倒置的代码,结果提示溢出,源代码如下:

  //递归数组反转
    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

 

相关文章:

  • 2022-12-23
  • 2021-10-20
  • 2021-09-18
  • 2022-12-23
  • 2021-04-16
  • 2022-01-20
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2020-10-15
  • 2022-01-25
  • 2022-12-23
  • 2021-09-18
  • 2022-12-23
  • 2021-05-29
相关资源
相似解决方案