unity3d 如何实现以int数组作为输出的递归?我如何通过下面的递归来实现:

nc1teljy  于 2023-04-12  发布在  其他
关注(0)|答案(2)|浏览(129)

我的笨方法如下:

void StupidMethod(List<T> list0, int init = 0)
    {
        for (int i = 0; i < list0.Count; i++)
        {
            List<T> list1 = GetChildList(list0);
            myIntArrayList.Add(new int[] { init });

            for (int j = 0; j < list1.Count; j++)
            {
                List<T> list2 = GetChildList(list1);
                myIntArrayList.Add(new int[] { init, i });

                for (...)
                {
                    ...
                }
            }
        }
    }

我想把它简化成这样:

void RecursiveMethod(List<T> list0, int init = 0)
    {
        for (int i = 0; i < list0.Count; i++)
        {
            List<T> list1 = GetChildList(list0);
            myIntArrayList.Add(new int[] { init });

            RecursiveMethod(list1, i);
        }
    }

但是我不知道如何科普int数组部分:myIntArrayList.Add(new int[] { init });数组的长度受“递归级别?”的影响,但我不知道如何获得“级别”。并且添加到myIntArrayList的数据是“stagger”。不知道你是否理解.....有人能理解并能帮助我吗?或者给予我一些关于“递归级别”的可能的提示或关键字,以便我在网上搜索。谢谢!
如果实现了这一点,它将变得非常整洁。我试图添加一个全局字段“计数器”,但没有找到一个合适的位置。每次运行该方法都会增加计数器。

rkue9o1l

rkue9o1l1#

您可以修改RecursiveMethod以包含递归级别和当前路径作为参数。

void RecursiveMethod(List<T> list0, int[] currentPath, int init = 0)
{
    for (int i = 0; i < list0.Count; i++)
    {
        List<T> list1 = GetChildList(list0);
        int[] newPath = new int[currentPath.Length + 1];
        Array.Copy(currentPath, newPath, currentPath.Length);
        newPath[currentPath.Length] = init;

        myIntArrayList.Add(newPath);

        RecursiveMethod(list1, newPath, i);
    }
}
vdgimpew

vdgimpew2#

不知道你想达到什么目的,但这个“伪”对你有用吗?

void RecursiveMethod(List<T> listOfLists, ArrayList arrayList, int init = 0)
{
    for(int i = 0; i < listOfLists.Count; i++)
    {
        List<T> childList = GetChildList(listOfLists);
        var auxArrayList = new ArrayList(arrayList);
        auxArrayList.Add(init);
        arrayList.Add(auxArrayList.ToArray());
        Recur(childList, arrayList, i);
    }
}

请记住,这个方法没有办法退出,所以需要类似“如果它是最后一个孩子,返回所有信息”的东西,以及一种跟踪arrayList是否不为null的方法

相关问题