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

© 冷月霜飞 中级黑马   /  2015-5-21 18:55  /  13317 人查看  /  26 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

递归和for循环都可以遍历元素,这两个技术都什么时候用啊?各自的优势都是什么?

26 个回复

正序浏览
各位师兄讨论的很是热烈,学习了!
回复 使用道具 举报
学习学习!
回复 使用道具 举报
看过这样一句话,跟你分享一下。

凡是用递归能做到的,用循环或者其他方式同样也能做到。
但是有时候用递归,短短几行代码就可以解决问题,用循环却要写半天。

优势。你的思路好,知道你自己在干什么,那你可以用递归,很可能方便开发。
但是不容易想。

循环容易想,但是有时候需要多打好多行代码。

至于楼上说的效率,个人感觉要视具体情况而定,不能直接就说谁高谁低。
回复 使用道具 举报
学习了.
回复 使用道具 举报
我是来看评论的  嘿嘿
回复 使用道具 举报
学习学习
回复 使用道具 举报
飘过看看
回复 使用道具 举报
学习了                                         
回复 使用道具 举报
CLAY 中级黑马 2015-5-27 17:15:30
18#
来瞅瞅,又涨知识了
回复 使用道具 举报
来瞅瞅。。。。。。。。
回复 使用道具 举报
递归是方法调用本身,总是要进出堆栈内存,容易导致内存溢出,并且运行慢,循环是直接在内存中执行,速度快
回复 使用道具 举报
学习了!!
回复 使用道具 举报
递归耗内存,不停地调用堆栈,效率低,计算数据有限,如果堆栈溢出,递归就结束了,循环没事
回复 使用道具 举报
递归是方法自身的调用,而且要给它提供出口。一般来说不建议使用递归,它的时间复杂度高,效率慢,对于大点的数据还要消耗不少内存。
回复 使用道具 举报
递归一般用在算法分析回溯法中,用小问题解决大问题。。。先从上层遍历到底部。。。
for循环,一般用在遍历数组,变数二叉树等!
回复 使用道具 举报
楼上的都很厉害
回复 使用道具 举报
kingowe 发表于 2015-5-23 08:48
递归耗内存,不停地调用堆栈,效率低,计算数据有限,如果堆栈溢出,递归就结束了,循环没事 ...

正解..



你说的符合我的观点.
回复 使用道具 举报
递归耗内存,不停地调用堆栈,效率低,计算数据有限,如果堆栈溢出,递归就结束了,循环没事
回复 使用道具 举报
JavaStudy770 发表于 2015-5-23 00:23
就是啊,每调用就在桟内存中开辟一个空间,这不很耗桟内存么?说他快是在特定条件下,数据不是很大的情况 ...

据我了解开发中是很少用到递归的,如下代码同样是给int[]数组赋值,用递归是很容易超出桟内存空间的:

  1. public class Test2 {

  2.         public static void main(String[] args) {
  3.                
  4.                 int[] arr = new int[1024*3];
  5.                 //forF(arr);
  6.                 Long start = System.currentTimeMillis();
  7.                 recursion(arr,0);
  8.                 Long end = System.currentTimeMillis();
  9.                 System.out.println(end-start);
  10.                 for(int i=0; i<arr.length; i++) {
  11.                         System.out.println(arr[i]);
  12.                 }
  13.         }
  14.         public static void forF(int[] arr) {
  15.                 Long start = System.currentTimeMillis();
  16.                 for(int i=0; i<arr.length; i++) {
  17.                         arr[i] = i;
  18.                 }
  19.                 Long end = System.currentTimeMillis();
  20.                 System.out.println(end-start);
  21.         }
  22.         public static void recursion(int[] arr, int index) {
  23.                
  24.                 if(index == arr.length-1) {
  25.                         arr[index] = index;
  26.                         return ;
  27.                 } else {
  28.                         arr[index] = index;
  29.                         index ++;
  30.                         recursion(arr, index);
  31.                 }
  32.         }
  33. }
复制代码
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马