您的位置:首页 > 编程语言 > Java开发

java实现递归将数组逆序输出

2012-04-30 22:53 1651 查看
最近在看数据结构和算法,并将一部分编程实现,但是也碰见了不少问题。比如下面这个递归将数组逆序输出的问题。虽然后来自己解决了,但是还是对问题的本质不是很清楚,希望各位前辈指明方向啊~

最开始的程序代码及运行效果如下:

代码如下:

import java.util.ArrayList;

/*

* 利用递归逆序输出一个数组

*/

public class DiguiOne {

ArrayList list=new ArrayList();

int i=-1;

public ArrayList diGui(int[] a){

while(i<a.length-1){

i++;

System.out.println("第一次递归"+i);

diGui(a);

System.out.println("第一次加数"+i);

list.add(a[i]);

}

return list;

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

DiguiOne digui=new DiguiOne();

int[] a={1,2,3,4,5};

ArrayList c=digui.diGui(a);

for(int i=0;i<c.size();i++){

System.out.println(c.get(i));

}

}

}

控制台输出为:

第一次递归0

第一次递归1

第一次递归2

第一次递归3

第一次递归4

第一次加数4

第一次加数4

第一次加数4

第一次加数4

第一次加数4

5

5

5

5

5

不明白的就是为什么后面的i就一直就是4了,递归的时候不是应该返回到前个状态吗?

后来自己想来想去就改了程序,但是还是不是明白,代码如下:

import java.util.ArrayList;

/*

* 利用递归逆序输出一个数组

*/

public class DiguiOne {

ArrayList list=new ArrayList();

int i=-1;

public ArrayList diGui(int[] a){

if(i<a.length-1){

i++;

System.out.println("第一次递归"+i);

diGui(a);

}else{

while(i>=0){

System.out.println("第一次加数"+i);

list.add(a[i]);

i--;

}

}

return list;

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

DiguiOne digui=new DiguiOne();

int[] a={1,2,3,4,5};

ArrayList c=digui.diGui(a);

for(int i=0;i<c.size();i++){

System.out.println(c.get(i));

}

}

}

控制台输出为:

第一次递归0

第一次递归1

第一次递归2

第一次递归3

第一次递归4

第一次加数4

第一次加数3

第一次加数2

第一次加数1

第一次加数0

5

4

3

2

1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: