如何通过递归实现int数组输出?求嵌套循环递归优化方案
解决递归生成层级化int数组的思路
核心问题分析
原嵌套循环的逻辑是每深入一层循环,就生成一个包含之前所有层级索引+当前层级索引的数组存入myIntArrayList。递归版本的关键缺陷是只传递了单个int,没有维护当前层级的完整路径,导致无法生成对应长度的数组。
具体解决思路
1. 传递当前索引路径
给递归方法增加一个参数,用来保存当前已经遍历过的索引路径(比如List<int>或int[])。每进入一层递归,就把当前循环的索引加入路径,然后生成数组存入列表,再递归调用子列表,最后根据实现方式决定是否回溯移除当前索引。
2. 两种实现方式
方式一:回溯式(复用路径集合,节省内存)
// 初始调用示例:RecursiveMethod(list0, new List<int>{init}); void RecursiveMethod(List<T> currentList, List<int> currentPath) { // 将当前路径转为数组存入目标列表,对应原循环每一层的Add操作 myIntArrayList.Add(currentPath.ToArray()); List<T> childList = GetChildList(currentList); for (int i = 0; i < childList.Count; i++) { // 追加当前索引到路径 currentPath.Add(i); // 递归处理子列表 RecursiveMethod(childList, currentPath); // 回溯:移除当前索引,恢复路径状态 currentPath.RemoveAt(currentPath.Count - 1); } }
方式二:非回溯式(每次创建新路径,逻辑更直观)
// 初始调用示例:RecursiveMethod(list0, new int[]{init}); void RecursiveMethod(List<T> currentList, int[] currentPath) { myIntArrayList.Add(currentPath); List<T> childList = GetChildList(currentList); for (int i = 0; i < childList.Count; i++) { // 创建新数组,包含原路径+当前索引 int[] newPath = currentPath.Concat(new int[]{i}).ToArray(); RecursiveMethod(childList, newPath); } }
关键技术关键词
- 递归回溯
- 状态路径传递
- 递归层级状态维护
内容的提问来源于stack exchange,提问作者Mustard
相关产品推荐
相关产品推荐

