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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 聂玉林 中级黑马   /  2012-6-20 13:44  /  5365 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

嵌套和递归有什么联系和区别??求解释

评分

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

查看全部评分

6 个回复

倒序浏览
时间复杂度 两个相差不多  实在要比较的话 一个是操作堆栈的时间(递归),一个是调用变量的时间(循环嵌套)

空间复杂度有区别
循环嵌套占的是程序空间 程序空间复杂度高
递归占得是堆栈空间    堆栈的空间复杂度

在逻辑上而言  递归比循环嵌套更难理解
但是递归可以写成子函数  大大节约我们的时间和程序空间

两种结合 使用效果 你懂得!

评分

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

查看全部评分

回复 使用道具 举报
嵌套是在代码里继续往下执行相应模块的代码,而递归是在条件为true时继续执行同一段代码,可以这样说,嵌套和递归都具有执行相似模块的功能,他们的关系是一种兄弟关系。

评分

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

查看全部评分

回复 使用道具 举报
1楼抽象、2楼误解。(个人看法{:soso_e100:})。
  1. if()
  2. {
  3.     if(){}
  4. }
  5. for(int i=0;i<10;i++)
  6. {
  7.   for(int j=0;j<10;j++){}
  8. }
复制代码
嵌套我们一般的说法是语法嵌套,如上面代码。再看递归:

  1. public int GetSum(int num)
  2. {
  3.     if(num<=1){return num;}
  4.     return num * GetSum(num-1);
  5. }
复制代码
嵌套的代码看似和递归相像,但执行的效果却是不同。嵌套的执行虽然也是由外至内,但外层和内层没有关系,而且最终执行的结果在返回时也没有层次,也就是说嵌套得再深最后也是直接返回。而递归则不然。递归是反复的对自身的调用,层次逐步加深且在返回时也是逐步返回出来。 建议楼主拿去调试并监听变量的变化就明白了。{:soso_e128:}

评分

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

查看全部评分

回复 使用道具 举报
递归的话必然涉及嵌套,这种嵌套,是通过系统栈的入栈和出栈实现的,每一个过程都会经过入栈保存,最后回归时出栈,跟普通函数调用没有实质的区别
只是递归是把一个大问题,有限的归结为小问题的过程;
嵌套的话,可以灵活的多,并且如果不是过多的函数嵌套的话,效率应该高一些。尾递归一般可以化成循环嵌套的形式。

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 刘逍遥 于 2012-6-22 15:35 编辑

嵌套是语法上逻辑的一种方式,
递归是自己调用自己的一种形式,当然也可以叫做嵌套的一种

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
嵌套:拿for来说就是一个for里面有嵌套了1或多个个完整的循环
递归:拿一个方法来说 就是在这个方法的方法体里面又调用了自己
递归的特点:间接或直接的调用自身,要有结束的条件
递归相对于循环来说他的效率比较低!应用场合不同。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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