递归每次自己调用自己,每次调用自己后函数的数据会较上次缩减,而且最后缩减至无需继续递归。内层函数调用完成,外层函数才算调用完成
n的阶乘伪代码
外层必须逐级向里面递,最后再向外归。
public class 递归_02 {public static void main(String[] args) {String s =new Scanner(System.in).next(); //链式编程f(s,0);}public static void f(String s,int n){if (n==s.length()){return;//到字符串结尾的下一个结束,然后返回}f(s,n+1); //执行他的下一个内容,System.out.print(s.charAt(n));}
}
递归用来解决二分问题
public class 递归_二分查找 {public static void main(String[] args) {int arr[]={1,2,3,4,5};System.out.println(f(arr,5,0, arr.length-1));}public static int f(int []a ,int target,int i,int j){if (i>j){return -1; //结束的条件}int mid=(i+j)>>1;if (target<a[mid]){return f(a,target,i,mid-1);} else if (target>a[mid]) {return f(a,target,mid+1,j);}else {return mid;}}
}
递归实现冒泡排序
public class 递归_冒泡排序 {public static void main(String[] args) {int [] arr={1,5,2,4,9,10,14,11};System.out.println(Arrays.toString(arr));bubble(arr,arr.length-1);System.out.println(Arrays.toString(arr));}//public static void bubble(int [] a,int j){if (j==0){//到了第一个元素,就剩下一个元素了,不用进行排序return;}int x=0; //for (int i = 0; i < j; i++) { //不能等于j,因为有一个i+1;if (a[i]>a[i+1]){ //交换变量需要找一个中间量,temptint tempt=a[i];a[i]=a[i+1];a[i+1]=tempt;x=i;}//还要进行递归排序bubble(a,x); //引入x优化算法//优化算法内容}}
}