`

Java I/O Recursion

    博客分类:
  • Java
 
阅读更多

递归方式计算阶乘

package com.fairy.io;

public class Recursion {
	// 循环方式计算阶乘,又叫做迭代方式
	public int compute(int number) {
		int result = 1;

		for (int i = number; i > 0; i--) {
			result *= i;
		}

		return result;
	}

	// 使用递归方式计算阶乘
	public int compute2(int number) {
		if (1 == number) {
			return 1;
		} else {
			return number * compute2(number - 1);
		}
	}

	public static void main(String[] args) {
		Recursion test = new Recursion();

		System.out.println(test.compute(5));
		System.out.println(test.compute2(5));
	}
}
 

递归方式计算斐波那契数列

package com.fairy.io;

public class Fibonacci {
	// 使用递归计算斐波那契数列
	public int compute(int n) {
		if (1 == n || 2 == n) {
			return 1;
		} else {
			return compute(n - 1) + compute(n - 2);
		}
	}
	
	public static void main(String[] args) {
		Fibonacci fibonacci = new Fibonacci();
		
		System.out.println(fibonacci.compute(1));
		System.out.println(fibonacci.compute(2));
		System.out.println(fibonacci.compute(3));
		System.out.println(fibonacci.compute(4));
		System.out.println(fibonacci.compute(5));
		System.out.println(fibonacci.compute(6));
	}
}

 

删除一个文件目录下的所有文件,采用递归实现 

package com.fairy.io;

import java.io.File;

public class FileTest7 {
	public static void deleteAll(File file) {
		if (file.isFile() || file.list().length == 0) {
			file.delete();
		} else {
			File[] files = file.listFiles();
			
			for (File f : files) {
				deleteAll(f);
				f.delete();
			}
		}
	}
	
	public static void main(String[] args) {
		deleteAll(new File("C:/abc"));
	}
}
 

 

罗列出一个文件目录下的所有文件,采用递归实现。

Version1:

package com.fairy.io;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class FileTest8 {
	
	// 用于判断目录或文件所处的层次
	private static int time;
	
	public static void deepList(File file) {
		if (file.isFile() || 0 == file.listFiles().length) {
			return;
		} else {
			File[] files = file.listFiles();

			files = sort(files);
			
			for (File f : files) {
				StringBuilder output = new StringBuilder();
				
				if (f.isFile()) {
					output.append(getTabs(time));
					output.append(f.getName());
				} else {
					output.append(getTabs(time));
					output.append(f.getName());	
					output.append("\\");
				}
				
				System.out.println(output);
				
				if (f.isDirectory()) {
					time++;
					
					deepList(f);
					
					time--;
				}
			}
		}
	}

	// 整理文件数组,使得目录排在文件之前
	private static File[] sort(File[] files) {
		List<File> sorted = new ArrayList<File>();

		for (File f : files) {
			if (f.isDirectory()) {
				sorted.add(f);
			}
		}

		for (File f : files) {
			if (f.isFile()) {
				sorted.add(f);
			}
		}

		return sorted.toArray(new File[files.length]);
	}

	// 判断需要加多少tab的方法
	private static String getTabs(int time) {
		StringBuilder sb = new StringBuilder();

		for (int i = 0; i < time; i++) {
			sb.append("\t");
		}

		return sb.toString();
	}
	
	public static void main(String[] args) {
		File file = new File("D:/Util");
		
		deepList(file);
	}
}
 

Version2:

import java.io.File;

public class ListFileDemo {
	
	public static void main(String[] args) {
		File file = new File("C:/Documents and Settings/root/桌面");
		list(file);
	}
	
	public static void list(File file) {
		if (file.isDirectory()) {
			File[] files = file.listFiles();
			
			if (files != null) {
				for (File f : files) {
					list(f);
				}
			}
		}
		
		System.out.println(file);
	}
}
分享到:
评论

相关推荐

    Java语言程序设计基础篇课后答案(勘误了第七版中的错误)

    3. **字符串与文本I/O**:"09reviewStringTextIO.doc"涵盖了Java中处理字符串的方法,如String类的常用API,以及文本文件的读写操作。可能会讲解FileReader、FileWriter、BufferedReader和BufferedWriter等类的使用...

    Java 9 for Programmers (Deitel Developer Series) 完整高清azw3版

    Files, I/O Streams, XML Serialization Concurrency for Optimal Multi-Core Performance, JavaFX Concurrency APIs Generics and Generic Collections Recursion, Database (JDBC™ and JPA) Keep in Touch ...

    java实现mp3合并的方法

    首先,我们要了解Java如何处理文件I/O操作。在Java中,我们可以使用`java.io`包中的类来读取、写入和操作文件。在这个示例中,`FileInputStream`用于读取MP3文件,而`FileOutputStream`则用于将这些文件的内容写入到...

    快速排序(java)

    3. **递归排序(Recursion)**: 分区操作完成后,对枢轴左边和右边的子序列分别进行快速排序。如果子序列只有一个或没有元素,那么排序结束;否则,重复上述步骤。 以下是一个简单的Java实现快速排序的代码示例...

    科学计算的语言——fortran95

    5. **输入/输出(I/O)**:Fortran95提供了多种方式来读写文件,包括格式化和非格式化的I/O,以及直接访问文件。 6. **错误处理(Error Handling)**:与早期版本相比,Fortran95增加了异常处理和错误检查功能,帮助...

    java中的快速排序

    - **递归排序(Recursion)**:对左右两个子序列分别进行快速排序,直到子序列只有一个或没有元素,排序结束。 3. **Java代码实现**: 在给定的代码中,`quicksort`方法实现了快速排序的核心逻辑: - 参数`stru...

    java初级知识

    ### Java初级知识要点详解 #### 一、Java概述与基础知识 **1. 何为编程?** 编程是指通过编写计算机程序来实现特定功能的过程。它涉及使用特定的编程语言(如Java),按照一定的规则和逻辑组织代码,以解决具体...

    黑马程序员入学Java知识

    ### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机能够执行一系列任务的过程。 2. **Java语言概述,历史、特点** - Java是一种广泛...

    快速排序sorting

    3. **递归排序(Recursion)**:对左右两个子序列分别进行快速排序,直到所有元素都在正确的位置上。 快速排序的平均时间复杂度为O(n log n),在最坏的情况下(即输入序列已经完全有序或完全逆序)时间复杂度为O(n^2)...

    java代码-冒泡 递归 构造方法

    冒泡排序的时间复杂度为O(n^2),适合小规模数据的排序。以下是一个简单的Java实现: ```java void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i ; i++) { for (int j = 0; j &lt; n - i - 1; j+...

    算法可视化系列——排序算法——快速排序

    快速排序的平均时间复杂度为O(n log n),在最坏的情况下(输入数组已排序或逆序),时间复杂度为O(n^2)。但在实际应用中,由于其优秀的平均性能,快速排序被广泛使用。 **AlgorithmQuickSort.java** 文件很可能是...

    Addison.Wesley.C++.by.Dissection.2002.pdf

    - **Mixing I/O Libraries:** Discusses mixing different I/O libraries. - **Software Engineering: I/O:** Emphasizes good practices in input/output. - **C++ Compared with Java:** Continues the comparison...

    JAVA一个快速排序实现代码

    快速排序的平均时间复杂度为O(n log n),在最坏的情况下,如果输入数组已经完全有序,时间复杂度会退化为O(n^2)。但这种情况在实际应用中很少出现,因此快速排序通常被认为是实际应用中最有效的通用排序算法之一。

    runtimeAnalysis:幂函数:迭代Vs。 递归的

    在实际应用中,Java中的`Math.pow()`方法使用了更复杂的算法,如快速幂(Fast Exponentiation),结合了迭代和递归的思想,实现了接近于O(log n)的时间复杂度。 总结来说,对于幂函数的计算,迭代法在大多数情况下...

    fp-resources:函数式编程的大量资源

    Monad在处理I/O、状态管理、异常处理等方面有着广泛的应用。 "category-theory" 是数学的一个分支,它探讨了结构和映射之间的普遍规律。在函数式编程中,范畴论提供了一种抽象思考工具,帮助我们理解各种概念如态射...

Global site tag (gtag.js) - Google Analytics