Java API —— 递归
3、递归解决问题的思想和图解:

- package diguidemos;
- /**
- * Created by gao on 15-12-27.
- */
- /*
- * 需求:请用代码实现求5的阶乘。
- *
- * 有几种方案实现呢?
- * A:循环实现
- * B:递归实现
- * a:做递归要写一个方法
- * b:出口条件
- * c:规律
- */
- public class DiGuiDemo01 {
- public static void main(String[] args) {
- int jc = 1;
- for (int i = 2; i <= 5; i++) {
- jc *= i;
- }
- System.out.println("5的阶乘是:" + jc); //5的阶乘是:120
- System.out.println("5的阶乘是:"+jieCheng(5));
- }
- /*
- * 做递归要写一个方法:
- * 返回值类型:int
- * 参数列表:int n
- * 出口条件:
- * if(n == 1) {return 1;}
- * 规律:
- * if(n != 1) {return n*方法名(n-1);}
- */
- public static int jieCheng(int n){
- if (n == 1){
- return 1;
- }else{
- return n * jieCheng(n-1);
- }
- }
- }
- package diguidemos;
- /**
- * Created by gao on 15-12-27.
- */
- /*
- * 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
- * 分析:我们要想办法找规律
- * 兔子对数
- * 第一个月: 1
- * 第二个月: 1
- * 第三个月: 2
- * 第四个月: 3
- * 第五个月: 5
- * 第六个月: 8
- * ...
- *
- * 由此可见兔子对象的数据是:
- * 1,1,2,3,5,8...
- * 规则:
- * A:从第三项开始,每一项是前两项之和
- * B:而且说明前两项是已知的
- *
- * 如何实现这个程序呢?
- * A:数组实现
- * B:变量的变化实现
- * C:递归实现
- *
- * 假如相邻的两个月的兔子对数是a,b
- * 第一个相邻的数据:a=1,b=1
- * 第二个相邻的数据:a=1,b=2
- * 第三个相邻的数据:a=2,b=3
- * 第四个相邻的数据:a=3,b=5
- * 看到了:下一次的a是以前的b,下一次是以前的a+b
- */
- public class DiGuiDemo02 {
- public static void main(String[] args) {
- // 定义一个数组
- int[] arr = new int[20];
- arr[0] = 1;
- arr[1] = 1;
- for (int i = 2; i < 20; i++) {
- arr[i] = arr[i - 1] + arr[i - 2];
- }
- System.out.println(arr[19]); //
- System.out.println("-----------------");
- int a = 1;
- int b = 1;
- for (int i = 0; i < 18; i++) {
- int temp = a;
- a = b;
- b = temp + b;
- }
- System.out.println(b); //
- System.out.println("-----------------");
- System.out.println(fib(20)); //
- }
- /*
- * 方法: 返回值类型:int 参数列表:int n 出口条件: 第一个月是1,第二个月是1 规律: 从第三个月开始,每一个月是前两个月之和
- */
- public static int fib(int n) {
- if (n == 1 || n == 2) {
- return 1;
- } else {
- return fib(n - 1) + fib(n - 2);
- }
- }
- }
2)递归遍历目录下指定后缀名结尾的文件名称
- package diguidemos;
- import java.io.File;
- /**
- * Created by gao on 15-12-27.
- */
- /*
- * 需求:请大家把C:\workspace目录下所有的java结尾的文件的绝对路径给输出在控制台。
- *
- * 分析:
- * A:封装目录
- * B:获取该目录下所有的文件或者文件夹的File数组
- * C:遍历该File数组,得到每一个File对象
- * D:判断该File对象是否是文件夹
- * 是:回到B
- * 否:继续判断是否以.java结尾
- * 是:就输出该文件的绝对路径
- * 否:不搭理它
- */
- public class DiGuiDemo03 {
- public static void main(String[] args) {
- // 封装目录
- File srcFolder = new File("C:\\workspace");
- // 递归功能实现
- getAllJavaFilePaths(srcFolder);
- }
- public static void getAllJavaFilePaths(File srcFolder) {
- // 获取该目录下所有的文件或者文件夹的File数组
- File[] fileArray = srcFolder.listFiles();
- // 遍历该File数组,得到每一个File对象
- for (File file : fileArray) {
- // 判断该File对象是否是文件夹
- if (file.isDirectory()) {
- getAllJavaFilePaths(file);
- } else {
- // 继续判断是否以.java结尾
- if (file.getName().endsWith(".java")) {
- // 就输出该文件的绝对路径
- System.out.println(file.getAbsolutePath());
- }
- }
- }
- }
- }
3)递归删除带内容的目录
- package diguidemos;
- import java.io.File;
- /**
- * Created by gao on 15-12-27.
- */
- /*
- * 需求:递归删除带内容的目录
- *
- * 目录我已经给定:C:\jianzhioffer02
- *
- * 分析:
- * A:封装目录
- * B:获取该目录下的所有文件或者文件夹的File数组
- * C:遍历该File数组,得到每一个File对象
- * D:判断该File对象是否是文件夹
- * 是:回到B
- * 否:就删除
- */
- public class DiGuiDemo04 {
- public static void main(String[] args) {
- // 封装目录
- File srcFolder = new File("C:\\jianzhioffer02");
- // 递归实现
- deleteFolder(srcFolder);
- }
- private static void deleteFolder(File srcFolder) {
- // 获取该目录下的所有文件或者文件夹的File数组
- File[] fileArray = srcFolder.listFiles();
- if (fileArray != null) {
- // 遍历该File数组,得到每一个File对象
- for (File file : fileArray) {
- // 判断该File对象是否是文件夹
- if (file.isDirectory()) {
- deleteFolder(file);
- } else {
- System.out.println(file.getName() + "---" + file.delete());
- }
- }
- System.out.println(srcFolder.getName() + "---" + srcFolder.delete());
- }
- }
- }
Java API —— 递归的更多相关文章
- 【分布式】Zookeeper使用--Java API
一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...
- 使用Java API操作HDFS文件系统
使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...
- Hadoop 系列(三)Java API
Hadoop 系列(三)Java API <dependency> <groupId>org.apache.hadoop</groupId> <artifac ...
- Elasticsearch 2.3.3 JAVA api说明文档
原文地址:https://www.blog-china.cn/template\documentHtml\1484101683485.html 翻译作者:@青山常在人不老 加入翻译:cdcnsuper ...
- HDFS shell操作及HDFS Java API编程
HDFS shell操作及HDFS Java API编程 1.熟悉Hadoop文件结构. 2.进行HDFS shell操作. 3.掌握通过Hadoop Java API对HDFS操作. 4.了解Had ...
- Linux -- 基于zookeeper的java api(一)
Linux -- 基于zookeeper的java api 首先启动你所有的 zkService.sh 查看状态:检查是否启动正确 [root@hu-hadoop2 ~]# zkServer.sh s ...
- Zookeeper java api
Zookeeper java api 主要有以下几个: 方法名称 描述 String create(final String path, byte data[], List acl, CreateM ...
- HDFS Java API 的基本使用
一. 简介 二.API的使用 2.1 FileSystem 2.2 创建目录 2.3 创建指定权限的目录 2.4 创建文件,并写入内容 ...
- Hadoop 学习之路(七)—— HDFS Java API
一. 简介 想要使用HDFS API,需要导入依赖hadoop-client.如果是CDH版本的Hadoop,还需要额外指明其仓库地址: <?xml version="1.0" ...
随机推荐
- unity--IOC框架资料整理
今天在网上找了一些unity资料研究,出了好多问题,编译无法通过,经人指点总算成功编译运行,做个笔记,整理如下: 一.下载unity: 二.在项目中添加Microsoft.Practices.Unit ...
- Flex xxx-app.xml配置
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http:/ ...
- ActiveMQ之Queue
Queue实现的是点到点模型,在以下的例子中,启动2个消费者共同监听一个Queue,然后循环给这个Queue发送多个消息. 代码如下: public class QueueTest { /** * @ ...
- SSHDroid(SSH Server for Android)通过PC或命令连接android
1.下载berserker.android.apps.sshdroid.apk .(如果你懒的下载,给我留言,我会发给你) 2.安装到手机,显示如图: 简单解释一下:一般android系统没有root ...
- IIS支持PHP
1. 解压php-5.2.6.zip到D:\php5,找到php.ini-dist改名为php.ini并将它放到C:\WINDOWS目录下. 2. 将D:\ php5目录下的libmcrypt.dll ...
- python之range(), xrange()
可以这样理解: range()立即执行,返回结果 xrange()延迟执行,需要时再返回结果.
- python之函数式编程
python提供了支持函数式编程的简单机制: 1. map函数 2. filter函数 3. reduce函数. 典型的M/R计算模型. 但还是有点简单...
- IOS仿Android九宫格解锁效果[转]
原理很简单,监听view中touch的一系列事件,当判定手指位置在某个按钮附近的时候则判断此按钮选中,并画出线. 效果图如下: 你可以在NineGridUnlockView.m文件中方法 touche ...
- 调皮的转义之addslashes
背景: php自5.3版本开始废除set_magic_quotes_runtime函数,并在5.4及以后版本中移除了该函数 今天程序在向mysql插入一个serialize序列化后的数组时,由于一个数 ...
- 网络笔记01-2 scoket
scoket: 1.socket /** 第一个参数(domain): 表示用什么协议 AF_INET 为IPV4开发 第二个参数(type): 表示scoket为什么类型SOCK_STREAM为TC ...