c# - 您将如何为数学创建 n 个嵌套循环?
问题描述
因此,我试图集中精力了解如何使用变量来表示循环嵌套的次数。
这是我编写的一个示例,用于模拟以下输出dimensions = 4
:
static void Main(string[] args)
{
int dimensions = 4; // e.g. for (1, 2, 3, 4), dimensions = 4
Console.WriteLine($"{addNumbers(dimensions)}");
Console.ReadKey();
}
static long addNumbers(int dimensions)
{
long number = 0;
// hard coded to be dimensions = 4
for (int h = 0; h <= dimensions; h++)
for (int i = 0; i <= dimensions; i++)
for (int j = 0; j <= dimensions; j++)
for (int k = 0; k <= dimensions; k++)
number += h + i + j + k; // just some random math
return number;
}
这将呈现以下的预期输出:
5000
所以要重新解决这个问题,我该如何编码以允许这个n 维?谢谢你的帮助!
解决方案
对于任意n
维度,您可以借助表示维度的数组进行循环: int[] address
n
static long addNumbers(int dimensions) {
int[] address = new int[dimensions];
// size of each dimension; not necessary equals to dimensions
// + 1 : in your code, int the loops you have i <= dimensions, j <= dimensions etc.
int size = dimensions + 1;
long number = 0;
do {
//TODO: some math here
// i == address[0]; j = address[1]; ... etc.
number += address.Sum();
// next address: adding 1 to array
for (int i = 0; i < address.Length; ++i) {
if (address[i] >= size - 1)
address[i] = 0;
else {
address[i] += 1;
break;
}
}
}
while (!address.All(index => index == 0)); // all 0 address - items're exhausted
return number;
}
最后,让我们添加一些Linq来看看结果:
int upTo = 5;
string report = string.Join(Environment.NewLine, Enumerable
.Range(1, upTo)
.Select(i => $"{i} -> {addNumbers(i),6}"));
Console.Write(report);
结果:
1 -> 1
2 -> 18
3 -> 288
4 -> 5000 // <- We've got it: 5000 for 4 dimensions
5 -> 97200
推荐阅读
- javascript - 尝试使用 js 向 html 中的 img 添加一个类,但在 Google devTools 中看不到它
- javascript - Chrome 调试范围视图:隐藏常量
- python - 如何从多索引列数据框创建多级索引
- python - Python matplotlib 使用 Tkinter 作为仪表板
- python - 使用 openpyxl 在同一单元格中更改字体样式、大小
- javascript - 数组未在反应 js 中映射
- python - NumPy 为每个子张量沿轴指定函数应用?
- reactjs - React 构建页面仅显示页眉和页脚
- swift - 如何制作从上到下的 .slide 过渡插入动画?
- python - EMR 集群:必须指定 MasterInstanceFleet 和 MasterInstanceGroup 之一