遞歸的幾個經典例子
阿新 • • 發佈:2017-07-07
void har logs 階乘 tin scan mov rom n)
註意:構造方法不可遞歸,否則是無限創建對象;
遞歸的幾個經典例子:
1.HannoiTower
1 import java.util.Scanner; 2 public class HanoiTower{ 3 //level代表盤子個數;三個char類型代表柱子 4 public static void moveDish(int level, char from, char inter, char to){ 5 if(level == 1){ 6 System.out.println("從"+from+"移動盤子1號到"+to); 7 }else{ 8 9 moveDish(level-1,from,to,inter);//調用自身 10 System.out.println("從"+from+"移動盤子"+level+"號到"+to); 11 moveDish(level-1,inter,from,to); 12 } 13 } 14 15 public static void main(String[] args){ 16 Scanner sc = newScanner(System.in); 17 System.out.println("請輸入盤子個數"); 18 int n = sc.nextInt(); 19 moveDish(n,‘a‘,‘b‘,‘c‘); 20 } 21 } 22
2.sum
1 import java.util.Scanner; 2 public class Sum{ 3 public static void main(String[] args){ 4 Scanner sc = new Scanner(System.in); 5System.out.println("請輸入n:"); 6 int n = sc.nextInt(); 7 int sum1 = sum(n); 8 System.out.println(sum1; 9 } 10 11 public static int sum(int n){ 12 if(n == 1){ 13 return 1; 14 }else{ 15 return n+sum(n-1); 16 } 17 } 18 } 19
3.factorial
1 import java.util.Scanner; 2 public class Factorial{ 3 public static void main(String[] args){ 4 Scanner sc = new Scanner(System.in); 5 System.out.println("請輸入一個小於20的整數,我會幫你求出它的階乘:"); 6 int n = sc.nextInt(); 7 int fac1 = fac(n); 8 System.out.println(n+"的階乘為:"+fac1); 9 System.out.println("~看我棒不棒~~"); 10 } 11 12 public static int fac(int n){ 13 if(n == 1){B 14 return 1; 15 }else{ 16 return n*fac(n-1); 17 } 18 } 19 } 20
4.sumFactorial
1 import java.util.Scanner; 2 public class SumFactorial{ 3 public static void main(String[] args){ 4 Scanner sc = new Scanner(System.in); 5 System.out.println("請輸入一個小於20的整數:"); 6 int n = sc.nextInt(); 7 int sf = sumFac(n); 8 System.out.println(sf); 9 } 10 //階乘和的累加 11 public static int sumFac(int n){ 12 if(n == 1){ 13 return 1; 14 }else{ 15 return fac(n)+sumFac(n-1); 16 } 17 } 18 //求階乘 19 public static int fac(int n){ 20 if(n == 1){ 21 return 1; 22 }else{ 23 return n*fac(n-1); 24 } 25 } 26 }
5.使用遞歸,遍歷 1 至100之間的每個數字
1 public class Number{ 2 public static void main(String[] args){ 3 iterator(100); 4 } 5 6 public static void iterator(int n){ 7 if(n >= 1){ 8 System.out.print(n+"\t"); 9 n--; 10 iterator(n); 11 } 12 13 } 14 } 15 16 17
遞歸的幾個經典例子