说简单点就是方法调用自身方法。给你个例子:
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
public class MonkeyPeach {
//利用递归的方法来求第一天的桃子数,输入参数为天数和当天的桃子数,输出为第一天桃子数
public static int getPeach_Num(int day, int peach_num) {
if (day == 1){
return peach_num;
}else if(day < 1 || peach_num < 0){
return 0;
}else{
return getPeach_Num(day - 1, (peach_num + 1) * 2);
}
}
public static void main(String[] args) {
System.out.println("第一天的桃子数:"+getPeach_Num(10, 1));
}
}
再比如说计算从1+2+3+4+5.......+100.
public class DiGui001 {
//递归:自己调用自己,容易出现死循环
//1+2+3+4+5..........100
int s=0;//n=1
public void sum(int n) {
s=s+n;
n++;
if(n<=100) {//退出循环
sum(n);//方法自己调用自己
}
}
public static void main(String[] args) {
DiGui001 d=new DiGui001();//创建对象
d.sum(1);//赋值
System.out.println(d.s);//打印s总数
}
}
我们如何用递归找出D盘下所有的txt文件,并且求最大文件和最小文件?
package Z.LIO.DiGui;
import java.io.File;
//递归找出D盘下的txt文件
public class DiGui {
long max=0;//大
long min=0;//小
File t=null;
File t1=null;
public void getDocPath(File f) {
//循环遍历当前目录下的文件
File []fs=f.listFiles();
if(fs!=null) {
for(File ff:fs) {
//判断是目录还是文件,如果是文件,在判断是否是word文档
if(ff.isFile()) {//文件
String fname=ff.getName();//获取文件名称
if(fname.endsWith(".txt")) {//.endsWith(".txt")//判断以什么结尾
//如果是word文档输出文件路径
long flen=ff.length();
if(flen>max) {//判断最大文件
max=flen;
t=ff;
}
System.out.println(ff.length()+":"+ff.getPath());
long flan=ff.length();
if(flan<=min) {//判断最小文件
max=flan;
t1=ff;
}
}
}else {//目录
getDocPath(ff);//如果是目录继续递归调用此方法
}
}
}
}
public static void main(String[] args) {
DiGui g=new DiGui();
File f=new File("D:/");
g.getDocPath(f);
System.out.println("最大文件是:"+g.t.getName()+"大小为:"+g.max);
System.out.println("最小文件是:"+g.t1.getName()+"大小为:"+g.min);
System.out.println("最大文件的路径是:"+g.t.getPath());
System.out.println("最小文件的路径是:"+g.t1.getPath());
}
}
本文共 383 个字数,平均阅读时长 ≈ 1分钟
评论 (0)