使用计算机计算组合数:

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. eclipse如何把多个项目用不同的文件夹分隔开

    我们有时候用eclipse时,发现Project Explorer下有非常多的项目,如果大部分不用了还好,我们可以从eclipse上删掉,但是如果还经常会用到的话,删掉了,每次用的时候,还得再重新导入 ...

  2. angularjs自定义指令实现分页插件

    由于最近的一个项目使用的是angularjs1.0的版本,涉及到分页查询数据的功能,后来自己就用自定义指令实现了该功能.现在单独做了个简易的小demo,主要是为了分享自己写的分页功能.注:本实例调用的 ...

  3. Python虚拟环境virtualenv

    用意 virtualenv可以搭建虚拟且独立的python运行环境, 使得单个项目的运行环境与其它项目独立起来. 安装 virtualenv本质上是个python包, 使用pip安装 pip inst ...

  4. 复杂关联SQL的优化

    昨天处理了一则复杂关联SQL的优化,这类SQL的优化往往考虑以下四点: 第一.查询所返回的结果集,通常查询返回的结果集很少,是有信心进行优化的: 第二.驱动表的选择至关重要,通过查看执行计划,可以看到 ...

  5. JS中的运算符和JS中的分支结构

    JS中的运算符 1.算术运算(单目运算符) + .-.*. /. %取余.++自增 .--自减 +:两种作用,链接字符串/加法运算.当+两边全为数字时,进行加法运算:当+两边有任意一边为字符串时,起链 ...

  6. SNS团队第五次站立会议(2017.04.26)

    一.当天站立式会议照片 本次会议主要内容:汇报工作进度,根据完成情况调整进度 二.每个人的工作 成员 今天已完成的工作 明天计划完成的工作 罗于婕 完善数据库文件 根据需求完善数据库文件 龚晓婷 编写 ...

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

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 学号 成员 贡献比 201421123001 廖婷婷 16% 201421123002 翁珊 16% 201421123004 ...

  8. GUI(自定义背景图片)

    如果组件中没有setIcon(...);这个方法,这是有需要给组件设置背景图片,这时就可以自定义绘制背景图片 /** * */ package com.niit.javagui; import jav ...

  9. 微信小程序xml解析

    准备: 下载xmldom库:https://github.com/jindw/xmldom 将dom.js.dom-parser.js.sax.js,entities.js拷贝微信小程序需要的文件夹下 ...

  10. 201521123089 《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4 ...