使用stringBuffer.reverse()方法反转输出字符串;递归完成字符串反转 ;递归进行冒泡排序

递归分两步, 递和归 ,先递后归,递就是从n到0,归就是0到n

并且,递和归之间要分界线,也就是可以触发归的条件,不然会陷入死循环.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
       String abc = "abcds";
        StringBuffer stringBuffer = new StringBuffer(abc);
        System.out.println(stringBuffer.reverse());
        reverse(0, abc);



        int[] arr = {4,2,6,8,3};
        bubble(arr, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }
    //j表示未排序区间的右边界
    public static void bubble(int[] arr, int j){

        //结束条件j左边无元素
        if (j == 0){
            return;
        }
        //此时的x表示有序和无序的分界线  x的右边为有序  x的左边为无序
        int x = 0;
        for (int i = 0; i < j; i++) {
            //大的往上走
            if (arr[i] > arr[i + 1]){
                int t = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = t;
                //只要发生了交换x就往前移动
                //而x后面没发生交换的一定是有序的
                x = i;
            }
        }
        bubble(arr, j - 1);
//        //结束条件j左边无元素
//        if (j == 0){
//            return;
//        }
//        for (int i = 0; i < j; i++) {
//            //大的往上走
//            if (arr[i] > arr[i + 1]){
//                int t = arr[i];
//                arr[i] = arr[i + 1];
//                arr[i + 1] = t;
//            }
//        }
//        bubble(arr, j - 1);
    }

    public static void reverse(int n, String str) {
        if (n == str.length()) {
            return;
        }
        reverse(n+1,str);
        System.out.println(str.charAt(n));
    }

}