java递归实现

本文深入浅出地介绍了递归的基本概念及其应用,包括通过递归实现阶乘计算、斐波那契数列生成以及文件目录的遍历。通过具体实例展示了递归方法的设计思路和实现细节。

所谓递归 (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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值