使用计算机计算组合数:

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. 前端开发【第4篇:JavaScript基础】

    JavaScript简述 上一篇文章已经聊过JavaScript的历史了这里不再复述了直接切入正题,JavaScript是一门解释型.动态类型.弱类型语言. 解释型语言和编译型语言就类似看一本书,编译 ...

  2. java锁机制

    2.4 锁机制        临界区是指,使用同一个锁控制的同一段代码区或多段代码区之间,在同一时间内最多只能有一个线程在执行操作.这个概念与传统的临界区有略微的差别,这里不想强调这些概念上的差别,临 ...

  3. springboot 入门二- 读取配置信息一

    在上篇入门中简单介绍下springboot启动使用了大量的默认配置,在实际开发过程中,经常需要启动多个服务,那端口如何手动修改呢? 此篇就是简单介绍相关的配置文件信息. Spring Boot允许外部 ...

  4. MyEclipse使用(一)

    一.配置 window ----> preferences (1)配置 JDK java--->Installed JREs --> Add ---> JRE name --- ...

  5. NHibernate教程(9)一1对n关联映射

    本节内容 引入 NHibernate中的集合类型 建立父子关系 父子关联映射 结语 引入 通过前几篇文章的介绍,基本上了解了NHibernate,但是在NHibernate中映射关系是NHiberna ...

  6. CCIE-MPLS基础篇-实验手册

    又一部前期JUSTECH(南京捷式泰)工程师职业发展系列丛书完整拷贝. MPLS(Multi-Protocol Label Switching) 目录 1:MPLS 基础实验.... 1.1实验拓扑. ...

  7. 超级简单实用的前端必备技能-javascript-全屏滚动插件

      fullPage.js fullPage.js是一个基于jQuery的全屏滚动插件,它能够很方便.很轻松的制作出全屏网站 本章内容将详细介绍Android事件的具体处理及常见事件. 主要功能 支持 ...

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

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

  9. 团队作业8——第二次项目冲刺(Beta阶段)Day7——5.26

    展开圆桌式会议: 会议内容:1.汇总BETA阶段的成果.2.针对BETA阶段的大家的获得的收获进行了讨论.3.对整个团队项目的过程进行了总结.每个人的工作分配: 队员 今日任务 贡献比 林燕 做最后测 ...

  10. 201521123122 Java 第二周学习总结

    1. 本周学习总结 1.进一步了解了对码云的使用,学会了将本地代码上传到码云以及将码云上的代码克隆到eclipse上. 2.感觉本章学的基本语法和c的基本上差不多啊 3.string的对象创建后无法修 ...