使用计算机计算组合数:

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

设计思想

(1)首先解决求n!的函数

(2)再结合组合数公式,求组合数

程序流程图

源程序代码

package Zuote;

import java.math.BigInteger;

import java.util.Scanner;

public class Zuoye1 {

public static void main(String args[])

{

       Scanner input=new Scanner(System.in);

       int n,k;//组合数公式中的n k

       System.out.println("请输入组合数公式的n和k:");

       n=input.nextInt();

       k=input.nextInt();

       while(k>=n)//判断输入是否符合公式,不符合提示错误,重新输入

       {

              System.out.println("输入错误,请重新输入");

              System.out.println("请输入组合数公式的n和k:");

              n=input.nextInt();

              k=input.nextInt();

       }

       long C;

       C=calculateN(n)/(calculateN(k)*calculateN(n-k));

       System.out.println("结果为"+C);

}

public static long calculateN(int n)//计算n!的递归公式

{

       if(n==1 || n==0){

              return 1;

       }

      

       return n*calculateN(n-1);

}

}

结果截图

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

设计思想

(1)     构建杨辉三角

(2)     组合数结果就相当于杨辉三角中的一个数,n为行,k为列

(3)     输出相应的数就可以

程序流程图

源程序代码

package Zuote;

import java.util.Scanner;

public class Zuoye2 {

public static void main(String args[])

{

Scanner input=new Scanner(System.in);

int n,k;//组合数公式中的n k

System.out.println("请输入组合数公式的n和k:");

n=input.nextInt();

k=input.nextInt();

int [][]f=new int[27][27];//构建杨辉三角

f[0][0] = 1;

for(int i = 1;i <= 24;i++)

{

for(int j = 1;j <= i + 1;j++)

{

f[i][j] = f[i - 1][j - 1] + f[i - 1][j];

}

}

System.out.println("组合结果为"+f[n+1][k+1]);//输出结果

}

}

结果截图

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

设计思想

(1)    递归组合数,相当于杨辉三角

(2)     构建递归函数,n,k相应于杨辉三角的行列

程序流程图

源程序代码

package Zuote;

import java.util.Scanner;

public class Zuoye3 {

public static void main(String args[])

{

Scanner input=new Scanner(System.in);

int n,k;//组合数公式中的n k

System.out.println("请输入组合数公式的n和k:");

n=input.nextInt();

k=input.nextInt();

System.out.println("组合结果为"+ZuHe(n,k));

}

public static long ZuHe(int a,int b) //构造递归函数

{

if(b==0)return 1;

else {

if(a==1)return 1;

else {

if(a==b)return 1;

else {

return (ZuHe(a-1,b-1)+ZuHe(a-1,b));

}

}

}

}

}

结果截图

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

设计思想

(1)    递归移动n个圆盘,先移动n-1个,再把第n个移动到c上

(2)    递归,依次移动

程序流程图

源程序代码

package Zuote;

import java.util.Scanner;

public class Zuoye4 {

public static void main(String args[])

{

int n;//有n个圆盘

char A='A';

char B='B';

char C='C';

Scanner input=new Scanner(System.in);

System.out.println("请输入n:");

n=input.nextInt();

Hanoi( n,A,B,C);

}

public static void Hanoi(int n,char A,char B,char C)//将 n个圆盘从A移动到C,B做辅助

{

if(n==1)

{

move(A,1,C);

}

else

{

Hanoi(n-1,A,C,B);

move(A,n,C);

Hanoi(n-1,B,A,C);

}

}

public static void move(char A,int n,char B)//将第n个圆盘从A移动到B

{

System.out.println("第"+n+"个圆盘从"+A+"->"+B);

}

}

结果截图

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

设计思想

(1)    从开头开始依次比较首尾字符

(2)    如果相同,再比较第二个字符和倒数第二个

(3)    依次比较直到最后完全相同,输出

程序流程图

源程序代码

package Zuote;

import java.util.Scanner;

public class Zuoye5 {

public static void main(String args[])

{

Scanner input=new Scanner(System.in);

String s=input.next();//输入字符串

int i,j;

i=0;//为字符串第一个字符

j=s.length()-1;//最后一个字符

System.out.println("是否是回文:"+HuiWen(s,i,j));

}

public static boolean HuiWen(String s,int i,int j)//判断字符串是否回文

{

if(i==j)

{

return true;

}

else

if((i-1)==j)

{

return true;

}

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

}

}

结果截图

java递归的应用和实例的更多相关文章

  1. Java学习-019-Properties 文件读取实例源代码

    在这几天的学习过程中,有开发的朋友告知我,每个编程语言基本都有相应的配置文件支持类,像 Python 编程语言中支持的 ini 文件及其对应的配置文件读取类 ConfigParse,通过这个类,用户可 ...

  2. Java学习-018-EXCEL 文件写入实例源代码

    众所周知,EXCEL 也是软件测试开发过程中,常用的数据文件导入导出时的类型文件之一,此文主要讲述如何通过 EXCEL 文件中 Sheet 的索引(index)或者 Sheet 名称获取文件中对应 S ...

  3. Java学习-017-EXCEL 文件读取实例源代码

    众所周知,EXCEL 也是软件测试开发过程中,常用的数据文件导入导出时的类型文件之一,此文主要讲述如何通过 EXCEL 文件中 Sheet 的索引(index)或者 Sheet 名称获取文件中对应 S ...

  4. Java学习-016-CSV 文件读取实例源代码

    上文(CSV文件写入)讲述了日常自动化测试过程中将测试数据写入 CSV 文件的源码,此文主要讲述如何从 CSV 文件获取测试过程中所需的参数化数据.敬请各位小主参阅,若有不足之处,敬请大神指正,不胜感 ...

  5. Java学习-015-CSV 文件写入实例源代码

    在日常的自动化测试脚本编写的过程中,有时要将获取的测试结果或者测试数据存放在数据文件中,以用作后续的参数化测试.常用的文件文件类型无非 txt.csv.xls.properties.xml 这五种文件 ...

  6. Java学习-012-文件删除实例及源代码

    此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 文件删除源代码如下: /** * @function 文件操作:删除文件.若文件存在且未被占用,则删除文件:若文 ...

  7. Java学习-011-创建文件实例及源代码

    此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 创建文件的源代码如下所示: /** * @function 文件操作:创建文件.若文件不存在,则直接创建文件:若 ...

  8. Java递归列出目录下全部文件

    Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */ import java.io.*; class hello{ public static void main(String ...

  9. 解析Java中静态变量与实例变量的区别

    java类的成员变量有俩种:一种是被static关键字修饰的变量,叫类变量或者静态变量:另一种没有static修饰,为实例变量.      在语法定义上的区别:静态变量前要加static关键字,而实例 ...

随机推荐

  1. Java类加载原理解析

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt229 2       Java虚拟机类加载器结构简述 2.1    JVM三 ...

  2. el表达式里面fn的用法

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp31 头部加入标签库 <%@ taglib prefix=" ...

  3. NOPI读xls文件写到txt中(NPOI系列二)

    private void button2_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); //找 ...

  4. 通信原理课程设计Javaswing技术计算出PCM编码——猎八哥FLY

    package keshe; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; ...

  5. 配置VNC SERVER 远程访问

    1.安装软件包 # yum install tigervnc-server -y 2. 配置VNC用户 # vim /etc/sysconfig/vncservers VNCSERVERS=" ...

  6. 团队作业8——第二次项目冲刺(Beta阶段)第三天

    BETA阶段冲刺第三天 1.当天站立式会议 2.每个人的工作 (1)昨天已完成的工作: 编写页面讨论 (2)今天计划完成的工作: 完成编写页面 (3)工作中遇到的困难: 验证码正确度 (4)每个人的贡 ...

  7. 201521123028 《Java程序设计》第8周学习总结

    1. 本周学习总结 2. 书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 Ans: 在这一题中我们需要写两个函数,分别是remove()和convertStringToLis ...

  8. 学号:201521123116 《java程序设计》第五周学习总结

    1. 本章学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 不能编 ...

  9. 201521123026 《Java程序设计》第三周学习总结

    1. 本章学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...

  10. 201521123040《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...