我如何将此代码转换为具有 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/