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

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

题目要求

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语句单独讨论。

  • 问题二:使用JDB进行调试时,step到输入语句时,自动跳出程序并出错
  • 解决办法二:使用IDEA进行调试并能够使用条件断点做为帮助。

感悟体会

  • 迭代法是一个十分好用而且编写风格简介的算法,可是须要注意具体问题中的特殊的 基底状况 ,相似于数学概括法中n=1,2时的状况须要重点关注。
相关文章
相关标签/搜索