黑马程序员————java中的递归原理
2015-06-13 21:33
260 查看
递归是基于:方法可以自己调用自己;并且是在方法内部调用自己
一定要有结束条件,否则持续运行,形成了死递归
递归的次数不能太多,都则就会造成堆栈溢出
构造方法不能递归调用,但是可以循环调用(就是调用另一个构造方法,哪一个构造方法再调用此构造方)
递归就是循环调用,每次调用,都把初始条件封装处理好向下传递。
int intArray=new int[20];
intArray[0]=1;
intArray[1]=1;
for(int i=2;i<intArray.length;i++){
intArray[i]=intArray[i-1]+intArray[i-2];
}
月份:1 2 3 4 5 6
对数;1 1 2 3 5 8
变量 a=0 a=1 a=1 a=2 a=3 a=5
b=1 b=1 b=2 b=3 b=5 b=8
其中b作为每月兔子数,a作为一个临时变量
while(month==1||month==2){
return 1;
}
return fib(month-1)+fib(month-2);//调用方法计算上一个月的和上上月的
}
public static void main(String[] args) {
//首先使用file封装一个目录
File file=new File("D:\\WotDownload");
System.out.println(file.getName());
//创建一个方法
find(file);
}
private static void find(File file) {
//获取目录下的所有文件和目录的引用
File[] listfile=file.listFiles();
System.out.println("|--"+file.getName()+"文件夹");
//遍历当前目录下的文件和目录
for(File f:listfile ){
//判断当前的文件是否是文件
if(f.isFile()&&f.getName().endwith(".java")){
System.out.println("\t|---"+f.getName());;
}else if(f.isDirectory()){
find(f);
}
}
}
}
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一.递归:
1.递归的概述:
递归是基于:方法可以自己调用自己;并且是在方法内部调用自己
2.注意:
一定要有结束条件,否则持续运行,形成了死递归递归的次数不能太多,都则就会造成堆栈溢出
构造方法不能递归调用,但是可以循环调用(就是调用另一个构造方法,哪一个构造方法再调用此构造方)
3.递归的使用思想:
递归就是循环调用,每次调用,都把初始条件封装处理好向下传递。
4.重点练习:
1).斐波那契数列(不死神兔)
解决思想就是:本月的兔子对数等于上个月的兔子对数和上上个月的兔子对数之和。
方法一:使用数组:数组的长度代表要计算的最终的"月数",每个元素,就是当月的兔子的对数
int intArray=new int[20];intArray[0]=1;
intArray[1]=1;
for(int i=2;i<intArray.length;i++){
intArray[i]=intArray[i-1]+intArray[i-2];
}
★★★方法二:使用两个变量
月份:1 2 3 4 5 6对数;1 1 2 3 5 8
变量 a=0 a=1 a=1 a=2 a=3 a=5
b=1 b=1 b=2 b=3 b=5 b=8
其中b作为每月兔子数,a作为一个临时变量
int a=0; int b=1; for(int i=1;i<=20;i++){ //那么i作为月份 b=b+a;//这一个月的b等于上个月b+a a=b-a;//然后将上个月的b赋值给这个月的a }//此方法不好,思想不好理解。但是还是可以很好的计算
方法三:使用递归方法
public int fib(int month){while(month==1||month==2){
return 1;
}
return fib(month-1)+fib(month-2);//调用方法计算上一个月的和上上月的
}
2).递归输出指定目录下所有的java文件的绝对路径案例
public class Demo {public static void main(String[] args) {
//首先使用file封装一个目录
File file=new File("D:\\WotDownload");
System.out.println(file.getName());
//创建一个方法
find(file);
}
private static void find(File file) {
//获取目录下的所有文件和目录的引用
File[] listfile=file.listFiles();
System.out.println("|--"+file.getName()+"文件夹");
//遍历当前目录下的文件和目录
for(File f:listfile ){
//判断当前的文件是否是文件
if(f.isFile()&&f.getName().endwith(".java")){
System.out.println("\t|---"+f.getName());;
}else if(f.isDirectory()){
find(f);
}
}
}
}
3).递归删除带内容的目录案例
public class Demo { public static void main(String[] args) { // 首先使用file封装一个目录 File file = new File("D:\\WotDownload1"); System.out.println(file.getName()); // 创建一个方法 find(file); } private static void find(File file) { // 获取目录下的所有文件和目录的引用 File[] listfile = file.listFiles(); System.out.println("|--" + file.getName() + "文件夹"); // 遍历当前目录下的文件和目录 for (File f : listfile) { // 判断当前的文件是否是文件 if (f.isFile()) { System.out.println("\t|---" + f.getName()); f.delete(); } else if (f.isDirectory()) { find(f); } } file.delete();//经过前面的过程,文件目录里的文件都被删除了,可以删除此目了 } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统