黑马程序员技术交流社区

标题: 递归问题 [打印本页]

作者: moonlight    时间: 2011-11-20 16:42
标题: 递归问题
本帖最后由 moonlight 于 2011-11-21 17:11 编辑

在Java的学习中递归的问题自己感觉总是不能理解透彻,哪位大神给点建议,最好带有例子,谢谢!
作者: 後天__牛永志    时间: 2011-11-20 17:29
public static void show(File f){
System.out.println(f);
File []files = f.listFiles();
for(int x =0;x<files.length;x++){
if(files[x].isDirectory())
show(files[x]);
else
System.out.println(f);
}
这是文件的一个递归的方法,递归就是自身调用自身,去看毕老师的视频,讲的很透彻的。
作者: 黄晓天    时间: 2011-11-20 18:31
1 2 3 5 8 13。。。。 费氏数字,它就符合递归的规律。递归就是自己调用自己
假设第三个数字为n,则第二个数字为n-1,第一个数字为n-2,那么 n = 1;(n>0)
                                                                                          n = f(n-1)+f(n-2);(n>2)
下面是一个递归的简单的例子:

package com.xiaotian.exercise;
import java.util.*;
public class TestRecursion {

        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入数字");
                long in = sc.nextLong();
                System.out.println(get(in));
        }
        public static long get(long n){
                if(n>2){
                        return get(n-1)+get(n-2);
                }else if(n>0){
                        return 1;
                }else{
                        System.out.println("数字不合法");
                        return -1;
                }
        }

}

作者: ZHB    时间: 2011-11-20 20:23
拿分,拿钱,谢谢!!
作者: 赵磊5    时间: 2011-11-20 22:06
public static int method(int n)
{
if(n==1)
return 1;
else
return n*method(n-1);
}
递归就是自己调用自己,但是肯定有一个跳出的条件,不然会一直递归下去,
f(n==1)
return 1; 就是跳出来的条件
return n*method(n-1); 就是自己调用自己,n 就是参数,method就是方法,n-1就是下一次传进去的参数
作者: 吴雨翔    时间: 2011-11-20 22:30
递归常用的就是用在文件操作上,因为文件的结构就有两种情况,一是文件,二是文件夹,所有可以通过递归遍历所有文件的操作:
  1.         public void scanFile(File file){
  2.                 if(file.isFile()){
  3.                         System.out.println(file.getName());
  4.                 }else{
  5.                         System.out.println(file.getName());
  6.                         File[] files = file.listFiles();
  7.                         for (File f : files) {
  8.                                 scanFile(f); //递归
  9.                         }
  10.                 }
  11.         }
复制代码
通过上面的代码就可以递归遍历出某个目录下的所有文件与文件夹的名称




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2