你的代码看的好废力啊 我觉的你把递归和循环同时混到一起用了
我猜 你想实现的功能是: 把集合的字符,拼接成一个字符串
如果这样的话你的代码明显有问题。要实现这个功能首先一定要遍历整个集合才能实现。
第一种方法:for循环 for(int index=0;index<al.size();index++) 这个循环就已经实现遍历了,你每次递归再循环,肯定是多此一举的
第二种方法:递归实现 每次递归时,删除一个字符,重复,直到集合的长度变为0时,结束。每次递归只是需要删除一个字符(删除字符这个动作是影响到递归次数的,拼接字符当做不相干的动作),所以递归是用不到循环的。
此外,递归和循环是可以实现转换的。基于“把集合的字符,拼接成一个字符串”这个功能,我把递归和等效的循环写了代码如下,一起交流哈,不对的指正- import java.util.ArrayList;
- public class T4 {
- static int i = 0;
- public static void main(String[] args) {
- ArrayList<Character> al = new ArrayList<Character>();
- al.add('a');
- al.add('b');
- al.add('c');
- String str = "";
- // getString(al,str);
- getString1(al,str);
- }
- //递归实现“把集合的字符,拼接成一个字符串”
- private static void getString(ArrayList<Character> al, String prefix) {
- System.out.println("第"+(++i)+"次递归,操作前的集合为"+al);
- prefix = prefix + al.remove(0); //递归的动作:将集合的元素拼接到字符串后面,并将已拼接的字符移除
- System.out.println("字符串为:"+prefix);
- if (al.size() > 0) {//可以进行递归的条件是集合的长度大于0
- getString(al, prefix);
- }
- }
- //循环实现“把集合的字符,拼接成一个字符串”
- private static void getString1(ArrayList<Character> al, String prefix) {
- for(;al.size()>0;){//循环结束的条件是集合长度为0
- System.out.println("第"+(++i)+"次循环,操作前的集合为"+al);
- prefix = prefix + al.remove(0); //递归的动作:将集合的元素拼接到字符串后面,并将已拼接的字符移除
- System.out.println("字符串为:"+prefix);
- }
- System.out.println("for循环结束后,字符串为"+prefix+" 集合为:"+al);
-
- }
- }
- 递归函数运行的结果:
- 第1次递归,操作前的集合为[a, b, c]
- 字符串为:a
- 第2次递归,操作前的集合为[b, c]
- 字符串为:ab
- 第3次递归,操作前的集合为[c]
- 字符串为:abc
- 循环的输出
- 第1次循环,操作前的集合为[a, b, c]
- 字符串为:a
- 第2次循环,操作前的集合为[b, c]
- 字符串为:ab
- 第3次循环,操作前的集合为[c]
- 字符串为:abc
- for循环结束后,字符串为abc 集合为:[]
复制代码 |