学号 20175212童皓桢 第五周迭代选做题学习

题目要求

1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功能

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指令使代码运行至需要输入数据处
输入图片说明

发现调试出现错误,并提示找不到源文件。鉴于JDB没有设置条件断点功能,因此换IDEA进行调试

3.根据题目要求,在IDEA中调试,学号尾数为2,故X=5
输入图片说明

练习中遇到的问题

  • 问题一:未经调试地程序在输入数据运行时,总出现结果为负数地情况

  • 解决办法一:经过多次尝试和规律探寻,发现问题地关键在于:由于编程实现组合数是通过迭代算法,组合数在m=1,m=n,m=0等这些 基底情况 时需要用if语句单独讨论。

  • 问题二:使用JDB进行调试时,step到输入语句时,自动跳出程序并出错

  • 解决办法二:使用IDEA进行调试并可以使用条件断点作为帮助。

感悟体会

  • 迭代法是一个十分好用并且编写风格简介的算法,但是需要注意具体问题中的特殊的 基底情况 ,类似于数学归纳法中n=1,2时的情况需要重点关注。
posted on 2019-03-30 14:38  20175212thz  阅读(173)  评论(0编辑  收藏  举报