黑马程序员技术交流社区

标题: 递归算法是怎么回事啊 [打印本页]

作者: houzhiming    时间: 2016-7-25 23:57
标题: 递归算法是怎么回事啊
新人求教,最近一直在学递归算法,但是感觉有点蒙,求大神指点迷津。感激不尽。
作者: 潜能开发    时间: 2016-7-26 00:23
递归
递归说白了就是自己调用自己
缺点:递归次数过多可能导致栈溢出
优点:不用知道循环次数

然后还可以用这种递归思想来解决一些问题,比如斐波那契数列、兔子问题等等
作者: houzhiming    时间: 2016-7-27 00:09
潜能开发 发表于 2016-7-26 00:23
递归
递归说白了就是自己调用自己
缺点:递归次数过多可能导致栈溢出

可是还是有点不太理解。自己调用自己,,,
作者: 胡诗亮66    时间: 2016-7-27 00:16
方法调用自己这个方法,最简单的例子就是阶层啦
5!=5*4!
4!=4*3!
3!=3*2!
2!=2*1!
1!=1
阶层方法里面有阶层,知道变为1返回1
作者: AlanMTuring    时间: 2016-7-27 23:23
递归看两点:   出口   规律   本人感觉主要是找规律
作者: 曼舞雪菲    时间: 2016-7-31 21:08
其实,递归就是自己调用自己,更具需求反复调用。不管是C和JAVA都一样
作者: 潜能开发    时间: 2016-8-7 09:44
houzhiming 发表于 2016-7-27 00:09
可是还是有点不太理解。自己调用自己,,,

2楼3楼的回答不错哟,是很好的补充和解析,可以看看,实在不懂还是认真再看一遍视频吧,毕竟像思想这种东西没理解的话怎么做题都不一定有用
作者: 律香浮动    时间: 2016-8-7 11:29
声明:此回复纯属于个人理解,不一定完全正确,但有助于理解递归具体内部的执行过程
递归是一种嵌套处理同样问题的思想,以空间换时间的做法,因此递归关键的是要有退出条件,否则会栈内存溢出。好了,不多说,上图。举个简单的例子,生活中,比如我们本来计划好的事情是,今天去买菜(路线1->6)。正准备出发,碰巧今天下雨,妈妈让我去XXX接她。于是我决定先去接妈妈(路线2-》5),在去的路上,突然来了朋友的电话,于是我接电话(路线3-》4).其实这也是一种中断思想,刚才说的三件事可以看成不同的任务,每个任务都有特定的功能,cpu根据不同的优先级(事情的紧急程度来决定具体哪个时候执行哪个任务(单核))。现在的任务优先级程度是,3 4 最高,2 5居中,1 6 优先级最低。所以执行任务的顺序是1 -> 2 -> 3 -> 4 ->5 ->6 即待最紧的任务完成后再退出,去执行优先级次之的任务,以此类推。递归的执行过程于此类似,所不同的是,每次方法的递归调用都是处理同样的问题,直到最底层满足条件,然后一层层退出,每一层退出都会执行上一层还没有执行完的事,具体来说就是 执行1 时,递归调用执行2,再递归调用执行3 (这里执行到3,就没有递归了,可认为是满足某种条件不再递归),3执行后剩下的任务4后就退出,执行上一层还没有执行的5,然后再退出,执行最开始的6.如此类推。
      这里结合5阶乘解释,函数都是具有特定功能(任务)的方法,所以当5传入以后,5 * fun (4) 返回 5 * fun (4),注意这里不是立刻返回,原理和我上面讲的类似,必须是从最底层,一层层往上抛,抛到最外层才返回最终的值。当最底层抛出1 时,会执行上层的return 2 * fun(1),。。。以此类推,最后得到值。

递归图解.png (54.11 KB, 下载次数: 58)

递归图解.png

作者: Toxicant    时间: 2016-8-7 12:45
递归算法:
作者: Toxicant    时间: 2016-8-7 12:49
递归算法:就是一种类似俄罗斯套娃一样的算法,如果判定条件成立,就是外部的娃娃里面还有小的娃娃,那么就进入小的娃娃,以此类推判断是否内部还有娃娃,当到达最后一个小娃娃时,即不能满足判定条件是,然后将大娃娃依次套回小娃娃,完成递归!!能明白吗?





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