java递归的应用和实例
使用计算机计算组合数:
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递归的应用和实例的更多相关文章
- Java学习-019-Properties 文件读取实例源代码
在这几天的学习过程中,有开发的朋友告知我,每个编程语言基本都有相应的配置文件支持类,像 Python 编程语言中支持的 ini 文件及其对应的配置文件读取类 ConfigParse,通过这个类,用户可 ...
- Java学习-018-EXCEL 文件写入实例源代码
众所周知,EXCEL 也是软件测试开发过程中,常用的数据文件导入导出时的类型文件之一,此文主要讲述如何通过 EXCEL 文件中 Sheet 的索引(index)或者 Sheet 名称获取文件中对应 S ...
- Java学习-017-EXCEL 文件读取实例源代码
众所周知,EXCEL 也是软件测试开发过程中,常用的数据文件导入导出时的类型文件之一,此文主要讲述如何通过 EXCEL 文件中 Sheet 的索引(index)或者 Sheet 名称获取文件中对应 S ...
- Java学习-016-CSV 文件读取实例源代码
上文(CSV文件写入)讲述了日常自动化测试过程中将测试数据写入 CSV 文件的源码,此文主要讲述如何从 CSV 文件获取测试过程中所需的参数化数据.敬请各位小主参阅,若有不足之处,敬请大神指正,不胜感 ...
- Java学习-015-CSV 文件写入实例源代码
在日常的自动化测试脚本编写的过程中,有时要将获取的测试结果或者测试数据存放在数据文件中,以用作后续的参数化测试.常用的文件文件类型无非 txt.csv.xls.properties.xml 这五种文件 ...
- Java学习-012-文件删除实例及源代码
此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 文件删除源代码如下: /** * @function 文件操作:删除文件.若文件存在且未被占用,则删除文件:若文 ...
- Java学习-011-创建文件实例及源代码
此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 创建文件的源代码如下所示: /** * @function 文件操作:创建文件.若文件不存在,则直接创建文件:若 ...
- Java递归列出目录下全部文件
Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */ import java.io.*; class hello{ public static void main(String ...
- 解析Java中静态变量与实例变量的区别
java类的成员变量有俩种:一种是被static关键字修饰的变量,叫类变量或者静态变量:另一种没有static修饰,为实例变量. 在语法定义上的区别:静态变量前要加static关键字,而实例 ...
随机推荐
- Tomcat Cluster负载均衡
author:JevonWei 版权声明:原创作品 Tomcat Cluster负载均衡 环境 tomcatA 172.16.253.108 tomcatB 172.16.253.105 代理服务器 ...
- Java jdk 快速配置
JAVA_HOME C:\Program Files\Java\jdk1.8.0_92 Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; CLASSPATH ...
- STM32—无需中断来实现使用DMA接收串口数据
本节目标: 通过DMA,无需中断,接收不定时长的串口数据 描述:当在串口多数据传输下,CPU会产生多次中断来接收串口数据,这样会大大地降低CPU效率,同时又需要CPU去做其它更重要的事情,我们应该如何 ...
- Charles 抓包
声明:本文为依依Love博主原创文章,未经博主允许不得转载 1. 简介: 2. 安装包下载: 3. 安装并替换破解版的jar包 4.设置mac代理 5. 安装证书: 6. 设置手机抓包 ...
- macOS上的ODBC-利用unixODBC连接PostgreSQL与SQLite并进行数据迁移
安装UnixODBC & PSQLODBC driver for UnixODBC $ brew install psqlodbc Updating Homebrew... ==> In ...
- 操作系统:ucore的部分Bug&挑战练习
ucore是清华大学提供的一个学习操作系统的平台.ucore有完整的mooc视频与说明文档. https://objectkuan.gitbooks.io/ucore-docs/content/# 本 ...
- 201521123115 《Java程序设计》第4周学习总结
1.本周学习总结 2.书面作业 1.注释的作用 2.面向对象设计 2.1将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事.(不得少于50字,参考QQ群中PPT的范例). 感觉自己在代码方 ...
- 201521044091 《Java程序设计》第3周学习总结
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 本周学习总结 ...
- 201521123025《java程序设计》第10周学习总结
1. 本周学习总结 2. 书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 只有执行过try语句块,finall ...
- 201521123051《Java程序设计》第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 一 JAVA语言中主要通过流来完成IO操作. 流:计算机的输入输出之间流动的数据序列,也是类的对象.java中 ...