递归的一些基础使用我都写在代码注释了,直接上代码吧。。。
public class Test { public static void main(String[] args) { } /** * 递归写法 * @param i */ static void f(int i){ f(i-1); } /** * 递归两种解法:1、找到一种划分方法 2、递推公式 等价转换 * f(n)求n的阶乘 ---> f(n-1) 求n-1的阶乘 * 找重复 n*(n-1)的阶乘 求n-1的阶乘是原问题的重复(规模重复) ---子问题 * 找变化:变化的量应该作为参数 * 找边界:出口 * @param i */ static int f1(int n){ if (n==1) { return 1; } return n*f1(n-1); } /** * 打印i到j */ static void f2(int i,int j){ if (i>j) { return ; } System.out.println(i); f2(i+1, j); } /** * 数组求和 * 难点就是加参数 * @param arr * @param begin * @return */ static int f3(int []arr,int begin){ if (begin==arr.length-1) { return arr[begin]; } return arr[begin]+f3(arr, begin+1); } /** * 难点就是加参数 * 翻转字符串 */ static String reverse(String src,int end){ if (end == 0) { return ""+src.charAt(0); } return src.charAt(end)+reverse(src,end-1); } /** * 多分支递归 斐波那契数列 * 递归分解为:直接量+小规模子问题 或者 多个小规模子问题 * 递归基本都可以写出递推公式 * 递归本质:递推公式 */ static int fib(int n){ if (n==1 || n==2) { return 1; } return fib(n-1)+fib(n-2); } /** * 巧用递推公式解最大公约数 * 递推公式 等价转换 */ static int gcd(int m,int n){ if (n==0) { return m; } return gcd(n, m%n); } /** * 别有洞天:递归形式进行插入排序 */ static void insertSort(int []arr,int k){ if (k==0) { return ; } // 划分两个部分 第一个部分 对前k-1个元素排序 insertSort(arr, k-1); // 第二个部分 把位置k的元素插入到前面的部分 int x = arr[k]; int index = k - 1; while(index>-1&&x<arr[index]){ arr[index+1] = arr[index]; index--; } arr[index+1] = x; } }