C#:N For 循环

标签 c#

我如何将此代码转换为具有 n 个嵌套的 for 循环:

            int num = 4;

            for (int i = 0; i <= num; i++)
            {
                for (int j = 0; j + i <= num; j++)
                {
                    for (int k = 0; i + j + k <= num; k++)
                    {
                        for (int l = 0; i + j + k + l <= num; l++)
                        {
                            Console.WriteLine(i + " " + j + " " + k + " " + l);
                        }
                    }
                }
            }

所以如果 num 是 2 那么就只有 2 个 for 循环;我和 j。

这不是家庭作业,我希望能反复完成。每个 Console.WriteLine() 都需要像一个元素一样存储在一起。

这个程序的输出创建了 n 维超空间 enzyme 指数。

最佳答案

好的,您想要一个非递归解决方案,它在 num 中参数化并且具有恒定数量的嵌套循环,是吗?

这是执行此操作的方法的草图。填写详细信息留作练习。

首先,我假设您有一个不可变类型“Vector”,它可以是 0 元组、1 元组、2 元组、3 元组……n 元组。

该方法接受向量的大小并返回该大小的向量序列。

IEnumerable<Vector> MakeVectors(int num)
{
    Vector current = new Vector(num); // make an all-zero vector with num items.
    while(true)
    {
        yield return current;
        Vector next;
        bool gotAnother = GetNextVector(current, out next);
        if (!gotAnother) break;
        current = next;
    }
}

那里。该问题现在已简化为两个较小的问题:

1) 给定一个大小为 num 的向量,它是序列中的最后一个向量吗?

2) 如果不是,下一个向量是什么?

计算出下一个向量给定当前向量应该是非常简单的:增加最后一个槽的值。如果这使得它太大,将其设置为零并增加前一个插槽的值。重复直到找到要增加的东西。

有道理吗?

关于C#:N For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129341/

相关文章:

c# - sqlite-net 中的 SqliteDataReader 在哪里?

c# - 在 noda time LocalDate 和 Datetime 之间转换的最佳方法?

c# - 如何在列表中查找总和小于或等于数字的项目

c# - 在 SSL/TLS 证书下,对 ASP.NET 的 Angular 请求返回 "Error Unknown"

c# - 使用 PromptDialog.Confirm 传递参数 :resume Bot Framework (C#)

C# 窗体 : Set text in ComboBox based on selected Item

c# - 如何检测 Windows 7/Vista 中的 .NET Framework 功能何时为 "turned off"?

c# - 如果我正在更新 DataRow,我是锁定整个 DataTable 还是只锁定 DataRow?

c# - 如何为类(class)中的所有测试设置测试类别

c# - 多个 html 类与 c#