查找与排序
递归、查找与排序补充
相关代码:
package com.DJL.Recursion;
import java.util.Arrays;
public class 递归 {
//求阶乘
/*
找重复:n*(n-1)的阶乘
找变化:变化的量作为参数
找边界:出口
*/
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);
}
//数组求和
static int f3(int[] arr, int begin) {
if (begin == arr.length - 1) return arr[begin];
return arr[begin] + f3(arr, begin + 1);
}
//字符串反转
static String f4(String str, int end) {
if (end == 0) return str.charAt(0) + "";
return str.charAt(end) + f4(str, end - 1);
}
//斐波那契
static int f5(int i) {
if (i == 1 || i == 2) return 1;
return f5(i - 1) + f5(i - 2);
}
//插入排序改成递归
static void f6(int[] arr, int k) {
//递归出口
if (k == 0) return;
//对前k-1个数进行排序
f6(arr, k - 1);
int x = arr[k];
int index = k - 1;
while (index > -1 && x < arr[index]) {
arr[index + 1] = arr[index];
index--;
}
arr[index + 1] = x;
}
//最大公约数
static int gcd(int m, int n) {
if (n == 0) return m;
return gcd(n, m % n);
}
//汉诺塔
static void f7(int N, String from, String to, String help) {
if (N == 1) {
System.out.println("move " + N + " from " + from + " to " + to);
return;
}
f7(N - 1, from, help, to);
System.out.println("move " + N + " from " + from + " to " + to);
f7(N - 1, help, to, from);
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println("数组的和为:" + f3(arr, 0));
String str = "adfdsf";
System.out.println("反转后的字符串为:" + f4(str, str.length() - 1));
int[] arr1 = {5, 1, 6, 9, 8};
f6(arr1, 4);
System.out.println("插入排序后的数组为:" + Arrays.toString(arr1));
//汉诺塔测试
f7(3, "A", "B", "C");
}
}