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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© houzhiming 中级黑马   /  2016-7-25 23:57  /  1115 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

新人求教,最近一直在学递归算法,但是感觉有点蒙,求大神指点迷津。感激不尽。

9 个回复

倒序浏览
递归
递归说白了就是自己调用自己
缺点:递归次数过多可能导致栈溢出
优点:不用知道循环次数

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

可是还是有点不太理解。自己调用自己,,,
回复 使用道具 举报
方法调用自己这个方法,最简单的例子就是阶层啦
5!=5*4!
4!=4*3!
3!=3*2!
2!=2*1!
1!=1
阶层方法里面有阶层,知道变为1返回1
回复 使用道具 举报
递归看两点:   出口   规律   本人感觉主要是找规律
回复 使用道具 举报
其实,递归就是自己调用自己,更具需求反复调用。不管是C和JAVA都一样
回复 使用道具 举报
houzhiming 发表于 2016-7-27 00:09
可是还是有点不太理解。自己调用自己,,,

2楼3楼的回答不错哟,是很好的补充和解析,可以看看,实在不懂还是认真再看一遍视频吧,毕竟像思想这种东西没理解的话怎么做题都不一定有用
回复 使用道具 举报
声明:此回复纯属于个人理解,不一定完全正确,但有助于理解递归具体内部的执行过程
递归是一种嵌套处理同样问题的思想,以空间换时间的做法,因此递归关键的是要有退出条件,否则会栈内存溢出。好了,不多说,上图。举个简单的例子,生活中,比如我们本来计划好的事情是,今天去买菜(路线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
回复 使用道具 举报
递归算法:
回复 使用道具 举报
递归算法:就是一种类似俄罗斯套娃一样的算法,如果判定条件成立,就是外部的娃娃里面还有小的娃娃,那么就进入小的娃娃,以此类推判断是否内部还有娃娃,当到达最后一个小娃娃时,即不能满足判定条件是,然后将大娃娃依次套回小娃娃,完成递归!!能明白吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马