各种基本递归汇总
package 基础;
import java.util.Arrays;
/*
* 重复中找变化。在变换中找规律
* 1.找重复(原问题的重复,规模更小,即子问题)
* 找到一种划分的方法
* 找到递推公式或者等价代换(都是父问题转换为子问题)
* 2.找变化
* 变化的量常作为参数
* 3.找边界(找出口)
*/
public class 递归 {
public static void main(String[] args) {
System.out.println(f1(3));
f2(4,7);
int arr[]=new int[] {1,3,4,5,6,8,7,2};
System.out.println(f3(arr,2));
System.out.println(f4("abcdefghijk",10));
System.out.println(f5(10));
System.out.println(f6(4,0));
f7(arr,7);
System.out.println(Arrays.toString(arr));
System.out.println(f8(new int[]{1,2,3,4,5,6,7,8},0,7,5));
int arr1[]=new int[]{2,4,5,1,6,3,7,8};
f9(arr1);
System.out.println(Arrays.toString(arr1));
}
//求数的阶乘
public static int f1(int num) {
if(num==1) {
return 1;
}
return num*f1(num-1);
}
//打印i到j
public static void f2(int i,int j) {
if(i>j) {
return ;
}
System.out.println(i);
f2(i+1,j);
}
//数组求和使用递归
public static int f3(int arr[],int begin) {
if(begin==arr.length-1) {
return arr[begin];
}
return arr[begin]+f3(arr,begin+1);
}
//翻转字符串使用递归
public static String f4(String str,int end) {
if(end==0) {
return ""+str.charAt(0);
}
return str.charAt(end)+f4(str,end-1);
}
//斐波那契数列 1 1 2 3 5 8 13
public static int f5(int n) {
if(n==1|n==2) {
return 1;
}
return f5(n-1)+f5(n-2);
}
//求最大公约数使用递归
public static int f6(int m,int n) {
if(n==0) {
return m;
}
return f6(n,m%n);
}
//递归形式进行插入排序
public static void f7(int arr[],int k) {
if(k==0) {
return ;
}
//分解成小数组,在小数组中进行插入排序
f7(arr,k-1);
int a=arr[k];
int index=k-1;
while(a<arr[index]&&index>-1) {
arr[index+1]=arr[index];
index--;
}
arr[index+1]=a;
}
//二分查找递归解法
public static int f8(int arr[],int low,int high,int key) {
if(low>high) {
return -1;
}
int mid=low+((high-low)>>1);
int num=arr[mid];
if(num<key) {
return f8(arr,mid+1,high,key);
}
else if(num>key) {
return f8(arr,low,high-1,key);
}
else {
return mid;
}
}
//希尔排序使用递归
public static void f9(int arr[]) {
//不断缩小增量
for(int len=arr.length/2;len>0;len=len/2) {
for(int i=len;i<arr.length;i++) {
int target=arr[i];
int j=i-len;
while(j>-1&&target<arr[j]) {
arr[j+len]=arr[j];
j=j-len;
}
arr[j+len]=target;
}
}
}
}
运行结果: