黑马程序员技术交流社区

标题: 递归算法的思路和原理 [打印本页]

作者: qqhao01    时间: 2013-9-1 22:38
标题: 递归算法的思路和原理
本帖最后由 qqhao01 于 2013-9-2 07:37 编辑

递归算法的思路和原理,思想是什么啊 最好能举个例子说明一下 谢谢各位了
作者: 张俊生    时间: 2013-9-1 22:50
http://bbs.itheima.com/forum.php ... ;pre_pos=5&ext=
给你个链接自己看看,
作者: 噚找    时间: 2013-9-1 22:54
一个简单的例子.
public static int getSum(int max,int n,int i){
  max+=i;
  if(n==0)
   return max;
  else return getSum(max,n-1,i+1);
}
这是我以一个最笨的方式实现的for循环转递归算法.它的效率肯定是很低的.但是却很容易理解递归的原理.
因为我们都很懂for循环,有任何题目,绝对最先想出的是for循环而不是递归.除非很熟练,不然否则很多用for循环很简单
求解的题,用递归却想半天想不出结果.
我说一下自己总结的for循环转递归的方法
首先用递归明确这几点,1:是结束条件.2:是推进条件.其次,在我们用常规for循环或是while求解时,有哪些是变量是参与运算的.
递归很麻烦.它内部参与运算的值,如果定义在递归内,开始计算,就没有意义了.
我在起初完全没有头绪时,就用这种方式清晰思路
作者: 范龙波    时间: 2013-9-1 22:56
其实你把毕老提到的那几个例子吃透了就明白了.
1.打印目录树结构
2.打印n的二进制形式
递归我的理解主要把握两点:
1.结束条件 : eg1--> if(file.isFile()); eg2--> if(n >0)
2.递归次数 : 如果无限递归的话 ,内存会溢出的
给你发张截图看看能理解吗?

作者: lonely_zb    时间: 2013-9-2 00:07
public static void listFiles(File dir){
           
            System.out.println(dir);
           
        File[] files =         dir.listFiles();
           
            for (File file : files) {
                       
                     if(file.isDirectory()){
                             listFiles(file);
                     }else{
                             System.out.println(file.getName());
                     }
                }
    }
这个列出指定目下的所有文件清单的方法,用到的就是递归,所谓递归,就是方法调用自身的方法,但是程序一定要有一出口,否则会陷入死循环,不能自拔,我的程序的出口,就是指定的目录下的所有文件都被打印出来的时候,程序就自动退出了,这就是出口




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