1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功能java
2 m,n 要经过命令行传入算法
3.正常状况下用JDB调试程序c(X,2),X为学号最后一位+3编程
import java.util.Scanner; class ZuHeShu{ int zuheshu (int n,int m){ if(m==1) return n; else if(m==0) return 1; else if(m==n) return 1; else if (n>m&&m>1&&n>1) return zuheshu(n-1,m-1)+zuheshu(n-1,m); else return -1; } } public class diedai { public static void main(String[] args) { Scanner reader = new Scanner (System.in); System.out.println("输入m:"); int m=reader.nextInt(); System.out.println("输入n:"); int n=reader.nextInt(); ZuHeShu a =new ZuHeShu(); if(a.zuheshu(n,m)==-1) System.out.println("输入数据有误"); else System.out.println("C(n,m)="+a.zuheshu(n,m)); } }
1.正常状况学习
2.异常状况测试
3.边界状况命令行
1.使用JDB调试,并将断点设置至main处,以下图:
调试
2.使用step
指令使代码运行至须要输入数据处
code
发现调试出现错误,并提示找不到源文件。鉴于JDB没有设置条件断点功能,所以换IDEA进行调试blog
3.根据题目要求,在IDEA中调试,学号尾数为2,故X=5
递归
解决办法一:通过屡次尝试和规律探寻,发现问题地关键在于:因为编程实现组合数是经过迭代算法,组合数在m=1,m=n,m=0
等这些 基底状况 时须要用if语句单独讨论。
解决办法二:使用IDEA进行调试并能够使用条件断点做为帮助。