将课程作业01、02、03的设计思想、程序流程图、源程序代码和结果截图整理成一篇博文。

一.使用计算机计算组合数:

1)使用组合数公式利用n!来计算

1. 设计思想:定义Calculate函数,函数使用递归,用来求一个数的阶乘,然后要求用户输入nk的值,然后利用公式计算出相应的组合数。

2. 程序流程图:

 3.实验代码

   public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println("求组合数C(n,k):(n为下标)");//用户输入

System.out.print("请输入n,k:");

Scanner scan = new Scanner(System.in);

int n = scan.nextInt();

int k = scan.nextInt();

if(n<k)

System.out.println("ERROR!");

else if(n==0&&k==0)

System.out.println("1");

else

System.out.print("C("+n+","+k+")="+Calculate(n)/Calculate(k)/Calculate(n-k));

}

public static long Calculate(int n) {

if(n==1)

{

return 1;

}

return n*Calculate(n-1);

}

}

4. 截图

2)使用递推的方法用杨辉三角形计算

1. 设计思想:要求用户输入nk,然后如果k=1的话,直接输出n,如果k不等于1的话,调用递归函数求出对应的n,k-1的组合数和n,k的组合数,并且进行相加,输出结果。

2. 程序流程图

 

3. 实验代码:

 package homework;import javax.swing.JOptionPane; public class Test3 {

 public static void main(){

        int n,k;

        String s=JOptionPane.showInputDialog("请输入一个正整数作为n");

        n=Integer.parseInt(s);

        String s1=JOptionPane.showInputDialog("请输入一个正整数作为k");

        k=Integer.parseInt(s1);

        JOptionPane.showMessageDialog( null, digui(k,n),"在n个元素中选取k个组合的所有结果数",JOptionPane.INFORMATION_MESSAGE );

    }

    public static long digui(int k,int n){

        long j=0;

        if(k!=1)

            j=digui(k-1,n)+digui(k,n);

        else

            return n;

        return j;

    }

}

4. 截图

(3)使用递归的方法用组合数递推公式计算

1. 设计思想:定义一个andsum函数,用来求累计的和,在andsum函数中,当要求的值为1时输出0,是1时输出1,既不是1也不是0时,就递归调用andsum函数,达到叠加的效果。

2. 实验流程图

         

3. 实验代码

package digui;import java.math.BigInteger;import java.util.Scanner;import java.util.*;public class digui {

    public static void main(String[] args){

        System.out.println("输入正整数n");

        Scanner sc=new Scanner(System.in);

        int a=sc.nextInt();

        System.out.println(a+"累加和为:"+andsum(a));   

    }

    public static int  andsum(int a)

    {

         if(a==0) return 0;

        else if(a==1) return 1;

         return a+andsum(a-1);

             }

}

4. 结果截图

二.递归编程解决汉诺塔问题。用Java实现

1. 设计思想:首先定义hanoita 函数,函数中递归调用hanoita 函数,先将n-1个盘子从A移到C,再从C移到B。递归,一直到n=1.2. 

2.实验流程图

3. 实验代码

import java.util.Scanner;
public class hanoita {
public static int m;
public static void main(String args[])
{
System.out.println("请输入要挪动盘子的个数:");
Scanner scanner=new Scanner(System.in);//组合数的下标
int m=scanner.nextInt();
System.out.println("移动盘子的步骤是:");
hanoi(m,'A','B','C');
}
public static void hanoi(int n,char one,char two,char three)//将n个盘从one座借助two座,移到three座
{
if(n==1)
{
move(one,three);
}
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
public static void move(char x,char y)
{
System.out.println(x+"-->"+y);
}
}

4.实验结果截图

三.使用递归方式判断某个字串是否是回文( palindrome

1. 设计思想:定义一个函数,用来返回true或者是false,最先让i=o,jstr.length() - 1public static boolean isPalindrome(String s,int i,int j)函数用来判断是否是回文,反复调用该函数,从第一个和最后一个比较,然后第二个和倒数第二个比较,一直到比较完所有字符。在主函数中要求用户输入字符,然后调用函数判断是否是回文数,并返回相应的truefalse.

2. 程序流程图:

3.实验代码

package dome;

import java.util.Scanner;

public class huiwen1 {  

    public static void main(String[] args){  

        System.out.println("请输入字符");

        Scanner s=new Scanner(System.in);  //输入一个字符串

        String str=null;

        str=s.next();

        int i = 0;  

        int j = str.length() - 1;  

        System.out.println(str + " 回文吗?" +isPalindrome(str, i, j));  

    }  

    public static boolean isPalindrome(String s,int i,int j){  

        if(i > j)  

            return false;

        if(i == j)  

            return true;  

        else{  

            return (s.charAt(i) == s.charAt(j)) && isPalindrome(s,i+1,j-1);  

        }  

    }  

}

4.截图

  

原文地址:https://www.cnblogs.com/zhmbg/p/7663815.html