1使用組合數公式利用n!來計算
a.設計思想
定義n和k,用遞歸函數表示出N!的階乘結果,c(n,k)=n!/(k!(n-k)!);調用函數求出c(n,k)的結果
b.源代碼
package kecheng1; import java.util.Scanner; public class Test {public static void main(String[] args) {System.out.print("請輸入N:");Scanner s=new Scanner(System.in);int n=s.nextInt();System.out.print("請輸入:k") ;int k=s.nextInt();System.out.println(n+"!="+ca(n));double x=ca(n)/(ca(k)*ca(n-k));System.out.println(x);}public static long ca(int n) {if(n==1 || n==0){return 1;}return n*ca(n-1);}//遞歸函數 }
c.流程圖
d.結果截圖
2.使用遞推的方法用楊輝三角形計算
a.程序設計思想
利用遞推的方法和楊輝三角計算出組合數的結果,將輸入的變量NK表示為楊輝三角的行和列,利用二位數組具體求出楊輝三角的數值,最后輸出需要的組合數的數值
b.源代碼
package kechengab;import java.util.Scanner; public class Dituiyh {public static void main(String[] args){Scanner put=new Scanner(System.in);System.out.println("輸入行:");int x=put.nextInt();System.out.println("輸入列:");int y=put.nextInt();if(y>x)System.out.print("輸入的數據錯誤");int [][]a=new int[6][6];for(int i=0;i<=x;i++){for(int s=0;s<=i;s++){if(s==i||s==0)a[i][s]=1;else{a[i][s]=a[i-1][s-1]+a[i-1][s];}}}//利用二維數組楊輝三角的表示System.out.println("組合數c(x,y)的值為"+a[x][y]);//輸出要求的值 }}
c.程序流程圖
d.結果截圖
3.漢諾塔
a.程序設計思想
調用遞歸函數,終止條件為參數N=1;移動盤子時,利用兩個函數,將盤子移動,利用中間的b柱子作為跳板,遞歸函數求出具體步驟,引用另一個函數具體輸出盤子移動的步驟
b.程序源代碼
package hannuota; import java.util.Scanner; public class Peg {static private int n = 0;public static void main(String[] args) {Scanner in = new Scanner(System.in);char one = 'A';char three = 'B';char two= 'C';System.out.println("輸入盤子數");int num = in.nextInt(); hanni(num,one,three,two);in.close();}private static void move(int num,char start,char end){n=n+1;System.out.println(n+"步操作盤子從:"+start+"-->"+end);}//函數表示出具體的盤子移動的方法private static void hanni(int num,char one,char three,char two) {if(num==1){move(1,one,two);}else{hanni(num-1,one,three,two);move(num,one,two); hanni(num-1,three,one,two);}}//遞歸的方法求出盤子移動軌跡}
c.流程圖
d結果截圖
4.回文數
a程序設計思想
定義字符串儲存想要的驗證的字符串,定義一個數組儲存,將兩個數組首尾進行比較,結束條件為比較到數組的中值處
b.源代碼
package huiwen;import java.util.Scanner;public class Dihuiwen {public static void main(String[] args) {Scanner put =new Scanner(System.in);System.out.println("輸入字符串:");String a = put.nextLine();//定義字符串char[] ch = new char[a.length()];for(int i = 0;i<a.length();i++){ch[i] = a.charAt(i);}//將字符穿賦值給數組if(zifu(ch,ch.length)==0)//引用函數體 {System.out.println("該字符串不是回文!");}else{System.out.println("該字符串是回文!");}// put.close(); }private static int zifu(char[] c,int i) {int size = c.length;if(i == size/2){return 1;}if(c[size - i] == c[i-1]){return zifu(c,i-1);}elsereturn 0;} //遞歸函數判斷字符串是否為回文數 }
c.流程圖
d.結果截圖
?
?總結
該課程主要練習了遞歸函數以及隨機數的運用,雖然完成了部分課題,但是自我感覺對于隨機數的運用,以及對于遞歸函數掌握還沒有到達非常熟練的地步,在以后的練習中,自己還需要對這兩方面內容進行更加全面的認識以及掌握。
?