1,不死兔子问题
1,问题描述
起初有一只兔子,兔子在第三个月成年并每个月能生出一只兔子,求第n个月里有多少只兔子。
2,解决方法
第一个月 1只 ,第二个月 1只, 第三个月2只,第四个月3只,第四个月5只,第五个月8只,如此递推。根据问题描述我们可以想到,从第三个月开始,往前递推前两个月,这个月份里的兔子是一定能够生兔子的,因此我们可以得出在第n-2个月里的兔子数量是出生的兔子的数量,而在第n-1个月里的兔子的数量是已经存在的兔子的数量,所以在第n个月里兔子的数量就是前两个月的兔子数量之和。
了解了如何计算兔子数量之后,则要思考如何进行代码实现,在此采用递归的方法,使用定义数组和定义一个方法函数两种方式进行实现。
3,代码实现
3.1 采用数组定义的方式
若求20天时,有多少只兔子,根据上述思路,定义一个长度为20的数组,并且给数组下标为0,1的数组赋值为1。
public static void main(String[] args) {
int[] arr=new int[20];
arr[0]=1;//存储第一个月兔子数量
arr[1]=1;//存储第二个月兔子数量
for(int i=2;i<arr.length;i++){
arr[i]=arr[i-1]+arr[i-2];
}
System.out.println(arr[19]);
}
结果为:6765
这样做的缺点是灵活性太差,在求不同的月份的兔子时需要修改代码。
3.2 采用递归函数的方法
直接上代码:
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入n");
int n=sc.nextInt();
System.out.println(f(n));
}
/*定义一个方法f(n)*/
public static int f(int n){
if(n==1||n==2){ //在前两个月兔子的数量都是1
return 1;
}else
{
return f(n-1)+f(n-2);
}
}
输出为:6765
2,获取一个目录下的所有文件
/* 思路: 1,根据给定的路径创建一个File对象 2,定义一个方法,用于获取给定目录下的所有内容,参数为第一步创建的File对象 3,获取给定的File目录下所有文件或者目录的File数组 4,遍历该File数组,得到每一个File对象 5,判断该File对象是否是目录 是:递归调用 不是:获取绝对路径输出在控制台 6,调用方法 */
public static void main(String[] args) {
GetAllTargetFile("E:\\anzhuorenwu");
}
public static void GetAllTargetFile(String TargetURL){
File file = new File(TargetURL);
File[] files = file.listFiles();
if(files!=null){
for(File f:files){
if(f.isFile()){
System.out.println(f.getAbsolutePath());
}else{
GetAllTargetFile(f.getAbsolutePath());
}
}
}
}