public class 遞迴 {
public static int jc(int n) {
if(n == 1)
return 1;
return n * jc(n-1);
}
}
public static void print(int i, int j) {
// 出口
if(i > j) return;
System.out.println(i);
// 重複與變化
print(i+1,j);
}
public static int sum(int[] arr,int start) {
if(start == arr.length)
return 0;
return arr[start] + sum(arr,start+1);
}
public static String reverse(String str, int end) {
if(end == 0)
return ""+str.charAt(0);
return str.charAt(end) + reverse(str,end-1);
}
// 求斐波那契數列第n項的值
public static int fib(int n) {
// 3. 找出口
if(n == 1 || n == 2) return 1;
// 1.找變化 | 2.找重複
return fib(n-1) + fib(n-2);
}
public static int zzxc(int m, int n) {
if(n == 0) return m;
return zzxc(n,m%n);
}
public static void insertArr(int[] arr, int k) {
// 1.對陣列前k-1個元素進行排序
insertArr(arr, k - 1);
// 2.將最後一個元素插入到排好序的陣列中
int temp = arr[k]; // 記錄該數
while(temp < arr[k-1]) { // 後一個數比前一個數小的情況,將大的數後移
arr[k] = arr[k-1]; // 直到找到適合自己的位置為止
k--;
}
arr[k] = temp;
}
等價於:
1~N-1從A移動到C,B為輔助
把N從A移動到B
1~N-1從C移動到B,A為輔助
/**
* 八、漢諾塔問題
* 將N個盤子從source移動到target的路徑列印
* @param N 初始的N個從小到大的盤子,N是最大編號
* @param from 原始柱子
* @param help 輔助的柱子
* @param to 目標柱子
*/
public static void printHanoiTower(int N, String from, String to, String help) {
printHanoiTower(N-1, from, help, to);
System.out.println("move" + N + "from" + from + "to" + to);
printHanoiTower(N-1, help, to, from);
}