java递归实现

来源:互联网 发布:淘宝男装最出名的店 编辑:程序博客网 时间:2024/06/06 05:37

所谓递归 (Recursion),就是方法调用自身

对于递归来说,一定有一个出口,让递归结束,只有这样才能保证
不出现死循环
n!=n*(n-1)*(n-2)....*2*1
n!=n*(n-1)!
f(x)=n*f(x-1)

(n-1)!=(n-1)(n-2)

题目:用递归实现,5*4*3*2*1的结果

思路:

5*compute(4)
5*compute(3)
5*compute(2)
5*compute(1)

public class Test1{//循环计算阶乘,也叫迭代方式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){Test1 test=new Test1();System.out.println(test.compute(5));System.out.println(test.compute2(5));}}
输出结果:

120
120

两种方式结果都一样,推荐使用第二种方式

斐波那契数列

题目:实现一个斐波那契数列,1,1,2,3,5,8,13,21.......

思路:先找到出口点,当n等于1或者2的时候都等于1,斐波那契数列公式(n-1)+(n-2)

public class Fab{public int compute(int number){if(1==number||2==number){return 1;}else{return compute(number-1)+compute(number-2);}}/** * @param args */public static void main(String[] args){Fab fab=new Fab();System.out.println(fab.compute(8));}}

输出结果:

21

题目:用递归实现列出一个文件夹下所有的目录,按XXXX一级目录

                                                                                                       XXXX二级目录

                                                                                                                 XXXX三级目录

的格式来显示

import java.io.File;import java.util.ArrayList;public class ListAllTest{    //用于判断目录所处的层次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){StringBuffer output=new StringBuffer();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--;}}}}//整理文件,使得目录在文件之前public static File[] sort(File[] files){ArrayList<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){StringBuffer buffer=new StringBuffer();for(int i=0;i<time;i++){buffer.append("\t");}return buffer.toString();}public static void main(String[] args){File file=new File("F:/TDDOWNLOAD");deepList(file);}}

输出结果如下:

开发工具\
                 Dreamweaver8 green.rar
mars\
          重构_改善既有代码的设计.rar
          Java设计模式.rar
面试技巧\
                01面试题目.rar
                02上机题目.rar
                JAVA学习资料.txt
                Linux_SDK开发指南_V1.0_-_20130205.doc
                test.rar


原创粉丝点击