递归:自己调用自己
递归应该具有变化的东西和不变的东西,具有一定规律性,还得留有出口。
如切蛋糕、或数学规律。
字符串反转的递归算法:
/*
* 用递归解决字符串反转
*
* */
public class reverse {
public static String strReverse(String str,int end) {
if (end == 0) {
return ""+str.charAt(0);
}
return str.charAt(end)+strReverse(str, end-1);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String string = "abcdefg";
System.out.println("原串:"+string);
System.out.println("反转:"+strReverse(string, string.length()-1));
}
}
最大公约数的递归算法:
public class 最大公约数 {
/*
* 最大公约数:数A 和 数B能除尽的最大数
*
* */
public static int gcd(int a,int b) {
if (a%b==0) {
return b;
}
return gcd(b, a%b);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(gcd(123, 12));
}
}
汉诺塔:
import java.util.Scanner;
public class 汉诺塔 {
public static void Hanoi(int N,String from,String to,String help) {
/*
* 1.将1-(N-1)从源盘移动到辅助盘
* 2.将N移动到 目标盘
* 3.将1-(N-1)移动到目标盘
* */
if (N==1) {
System.out.println("Move "+N+" from "+from+" to "+to);
return;
}
Hanoi(N-1, from,help , to);
System.out.println("Move "+N+" from "+from+" to "+to);
Hanoi(N-1, help, to, from);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int num = scanner.nextInt();
Hanoi(num,"A","B","C");
}
插入排序的递归算法:
public class 插入排序的递归算法 {
public static void Insert(int[] arr,int k) {
if (k==0) {
return;
}
Insert(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;
}
public static void main(String[] args) {
int[] arr = new int[] {5,12,6,3,2,16,1};
Insert(arr, arr.length-1);
for (int i : arr) {
System.out.print(i+"\t");
}
}
}
斐波那契 :
public class 斐波那契 {
public static int fib(int step) {
if (step==1||step==2) {
return 1;
}
return fib(step-1)+fib(step-2);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int N = 10;
System.out.println(fib(N));
}
}
希尔排序:
public class 希尔排序 {
static void shell(int[] arr) {
for (int i = arr.length/2; i>0; i=i/2) {
for (int j = i; j < arr.length; j++) {
int temp = arr[j];
int index = j-i;
while (index>-1&&temp<arr[index]) {
arr[index+i] = arr[index];
index-=i;
}
arr[index+i] = temp;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[] {4,5,7,8,12,10,3,6,1,9};
shell(arr);
for (int i : arr) {
System.out.println(i+" ");
}
}
}