非规律化递归问题:文件搜索
package com.gao.file;
import java.io.File;
/**
* 利用递归来实现文件的查找
*/
public class RecursionDemo3 {
public static void main(String[] args) {
searchFile(new File("E:/"),"二寸照片.jpg");
}
private static void searchFile(File dir,String fileName) {
//判断dir是不是目录
if (dir !=null && dir.isDirectory()){
//可以进行查找了
//提取当前目录的一级文件对象
File[] files = dir.listFiles();
//判断是否存一级文件对象,才可以进行遍历
if (files !=null && files.length >0){
for (File file : files) {
//判断当前遍历的是一级文件还是目录
if (file.isFile()){
//判断是不是咱们要找的
if (file.getName().contains(fileName)){
System.out.println("已找到该文件" + file.getAbsolutePath());
}
}else {
//是文件夹 需要继续查找
searchFile(file, fileName); // 这里应该从file开始接着找
}
}
}
}else {
System.out.println("所输入的不是文件夹,无法查找");
}
}
}
非规律化递归问题:啤酒问题
package com.gao.file;
public class ResursionDemo4 {
public static int totalNumber;
public static int lastBottleNumber;
public static int lastCoverNumber;
public static void main(String[] args) {
buy(10);
System.out.println("共可以买" + totalNumber + "瓶");
System.out.println("空瓶:"+lastBottleNumber);
System.out.println("瓶盖:"+lastCoverNumber);
}
private static void buy(int n) {
//2.看可以立马买多少瓶
int buyNumber = n / 2;
totalNumber+=buyNumber;
// 3.把盖子和瓶子换算成钱
// 统计本轮总盖子数 和瓶子数
int coverNumber=lastCoverNumber+buyNumber;
int bottleNumber=lastBottleNumber+buyNumber;
//4.统计可以换算的钱
int allMoney=0;
if (coverNumber >= 4){
allMoney+=(coverNumber / 4) * 2;
}
lastCoverNumber=coverNumber % 4;
if (bottleNumber >= 2){
allMoney+=(bottleNumber / 2) * 2;
}
lastBottleNumber=bottleNumber %2;
if (allMoney >= 2) {
buy(allMoney);
}
}
}