20175227 张雪莹 2018-2019-2 《Java 程序设计》第五周学习总结
要求
使用 C(n,m)=C(n-1,m-1)+C(n-1,m) 公式进行递归编程实现求组合数 C(m,n) 的功能
m,n 要通过命令行传入
提交测试运行截图 (至少三张: 正常如 c(3,2), 异常如 c(2, 3), 边界情况如 c(m,m))
提交正常情况下用 JDB 调试程序 c(X,2) 的截图, X 为学号最后一位 + 3, 至少四张截图
把代码推送到码云
程序为:
- import java.util.Scanner;
- class Suanfa{
- public int diedaiSuanfa(int n , int m) {
- if(n==0||n<m)
- return 0;
- else if(n==m||m==0)
- return 1;
- else if(m==1)
- return n;
- else
- return diedaiSuanfa(n-1, m-1)+diedaiSuanfa(n-1,m);
- }
- }
- public class Diedai {
- public static void main(String args[]) {
- Suanfa sum=new Suanfa();
- System.out.print("请输入 n,m(回车确认):");
- Scanner reader=new Scanner(System.in);
- int a=reader.nextInt();
- int b=reader.nextInt();
- System.out.println("C("+a+","+b+")="+sum.diedaiSuanfa(a,b));
- }
- }
正常情况
边界情况
异常情况
JDB 调试下, 求 C(10,2)
代码调试中的问题和解决过程
问题 1: 编译课后时出现
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Dieda
问题
问题 1 解决方案: 是输入数据时发生数组越界的异常, 之前用的是:
- int [] a = new int [args.length];
- for(int i=0; i<args.length;i++) {
- a[i] = Integer.parseInt(args[i]);
- }
更换了输入数据的形式后为:
- Scanner reader=new Scanner(System.in);
- int a=reader.nextInt();
- int b=reader.nextInt();
顺利编译, 运行
代码托管 https://gitee.com/zxy20175227/week4
来源: http://www.bubuko.com/infodetail-3004474.html