A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qqhao01 高级黑马   /  2013-9-1 22:38  /  2361 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 qqhao01 于 2013-9-2 07:37 编辑

递归算法的思路和原理,思想是什么啊 最好能举个例子说明一下 谢谢各位了

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

4 个回复

倒序浏览
回复 使用道具 举报
一个简单的例子.
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求解时,有哪些是变量是参与运算的.
递归很麻烦.它内部参与运算的值,如果定义在递归内,开始计算,就没有意义了.
我在起初完全没有头绪时,就用这种方式清晰思路

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
其实你把毕老提到的那几个例子吃透了就明白了.
1.打印目录树结构
2.打印n的二进制形式
递归我的理解主要把握两点:
1.结束条件 : eg1--> if(file.isFile()); eg2--> if(n >0)
2.递归次数 : 如果无限递归的话 ,内存会溢出的
给你发张截图看看能理解吗?

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 赞一个!

查看全部评分

回复 使用道具 举报
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());
                     }
                }
    }
这个列出指定目下的所有文件清单的方法,用到的就是递归,所谓递归,就是方法调用自身的方法,但是程序一定要有一出口,否则会陷入死循环,不能自拔,我的程序的出口,就是指定的目录下的所有文件都被打印出来的时候,程序就自动退出了,这就是出口

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马