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

© 唐林渊 黑马帝   /  2012-2-18 08:56  /  2062 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐林渊 于 2012-2-18 21:15 编辑

大家能不能简单的讲一下递归
今天老师讲的递归不太明白
就看明白它是不是有规律的,然后就是阶梯型的延续对吗??

评分

参与人数 1技术分 +1 收起 理由
admin + 1 不明白就问。加分

查看全部评分

4 个回复

倒序浏览
本帖最后由 1毫秒的价值 于 2012-2-18 09:07 编辑

递归算法解决问题的特点:   
(1) 递归就是在过程或函数里调用自身。   
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。   
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。 
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
递归算法所体现的“重复”一般有三个要求:   
一是每次调用在规模上都有所缩小(通常是减半);   
二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);  
三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。  

评分

参与人数 2技术分 +2 黑马币 +10 收起 理由
彭小芳 + 10 太赞了,你的算法功底必定很好.
admin + 2

查看全部评分

回复 使用道具 举报
我在基础班刚学习了这个东西,不过老师只讲了递归在基本数据类型中的运算,更复杂的情况还没讲.递归嘛,就是调用一下自己的函数,但是传入的是自己的上一个参数,比如要求的是n,参数就是n-1,这样虚拟机自动会循环向上计算,直到满足你设定的条件才结束,这个循环过程是虚拟机私下里完成的,这也正是它比for循环更为简便的地方,for循环的话你要在循环里面写上具体的计算公式.不过它和for循环的计算原理是一样的..呵呵,我说的有点简单啊,,,只学到这么多,,,

评分

参与人数 1技术分 +1 收起 理由
admin + 1 新人报到!

查看全部评分

回复 使用道具 举报
递归:  1,方法内调用本方法 ,
2,方法内有判断条件以便方法在栈内存不停的调用本方法有结束条件。
回复 使用道具 举报
递归,从字面上解释就是在方法本身调用自己的方法,或者间接调用
这个其实很好理解的,如果你熟悉了,在编程序的时候需要用到时,你会很自然的用上去了的,我给段包含了递归的代码给你看,希望对你有所帮助:
        public  void demo(int i){
                int m  =i;
            System.out.println(m);
                if(i<10){
                        m++;
                        demo(m);       
                }
        }

用这个方法时,传入一个int类型的数(比如说0),第一遍运行这个方法是m=i,也就是说m=0,因为m<10,所以满足if语句的条件,然后将m加1,在调用自己,这个时候,传入的参数就是1了,然后用m=1进行判断,m=1,显然小于10,所以又执行if()语句,将m加1,再调用自己,将m=2传给demo(int i )方法,以此类推,一直到m=10时.不满足if语句的条件,这是这个方法才算运行完毕。

评分

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

查看全部评分

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