遞歸完成數組的逆序

一、題目

題目描述

一個棧依次壓入1,2,3,4,5那麼從棧頂到棧底分別爲5,4,3,2,1。
將這個棧轉置後,從棧頂到棧底爲1,2,3,4,5,也就是實現了棧中元素的逆序,
請設計一個算法實現逆序棧的操作,但是隻能用遞歸函數來實現,而不能用另外的數據結構。

給定一個棧Stack以及棧的大小top,請返回逆序後的棧。
測試樣例:

二、分析

一個數列1,2,3,4,5,如果想變成5,4,3,2,1,可通過以下方式得到。
1與5對換,此時爲5,2,3,4,1
2與4對換,此時爲5,4,3,2,1

1、通過以上兩步可以找到遞歸的邊界情況,當對換的次數超過數列長度的一半時,即結束。
2、遞歸函數的作用是完成一次對換。

public class YongDiGuiHanShuHeZhan {
     public static int[] reverseStackRecursively(int[] stack, int top) {
         reverse(stack, 0);
         return stack;       
     }
     /**
      * 
      * @param stack  要翻轉的數組
      * @param index  翻轉次數
      */
     public static void reverse(int []stack,int index){
         if(index>=stack.length/2){//邊界情況
             return;
         }
         //完成一次交換
         int temp=stack[index];
         stack[index]=stack[stack.length-index-1];
         stack[stack.length-index-1]=temp;
         reverse(stack, index+1);//
     }
     public static void main(String[] args) {
        int a[]={1,2,3,4,5};
        int b[]=reverseStackRecursively(a,5);
        for(int i=0;i<b.length;i++){
            System.out.print(b[i]);
        }

    }
}

There’s always a bit of something hidden when you say nothing.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章