學號 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時的狀況須要重點關注。
相關文章
相關標籤/搜索