You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过递归实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:14:57