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.结果截图
总结
该课程主要练习了递归函数以及随机数的运用,虽然完成了部分课题,但是自我感觉对于随机数的运用,以及对于递归函数掌握还没有到达非常熟练的地步,在以后的练习中,自己还需要对这两方面内容进行更加全面的认识以及掌握。