如何将此 Python 脚本翻译成 C#?
How to translate this Python script to C#?
我有一个用 Python 语言编写的脚本,我想看看它在 C# 中的样子。
def combis(n):
if n < 0:
return
if n == 0:
yield []
for x in (1, 3, 4):
for combi in combis(n-x):
yield [x] + combi
>>> list(combis(5))
目前我不明白如何在 C# 中实现这段代码,让我分心的是那些产量以及我的方法应该写在哪种类型中。
我目前所拥有的无法正常工作且无法理解
static int[] Combs(int n)
{
int[] tusc = { };
if (n < 0)
yield break;
if (n == 0)
yield return tusc;
int[] X = { 1, 3, 4 };
for(int i = 0; i < X.Length; i++)
{
for(j = 0; j <= Combs(n-X[i]).Length; j++)
{
yield return X + j;
}
}
}
当n等于5时python脚本的输出是:
>>> list(combis(5))
[[1, 1, 1, 1, 1], [1, 1, 3], [1, 3, 1], [1, 4], [3, 1, 1], [4, 1]]
当n等于4时:
[[1, 1, 1, 1], [1, 3], [3, 1], [4]]
using System;
using System.Collections.Generic;
namespace HowToTranslateInCSharp
{
class Program
{
static IEnumerable<List<int>> Combis(int n)
{
if (n >= 0)
{
if (n == 0)
yield return new List<int>();
else
{
foreach (var x in new[] {1, 3, 4})
{
foreach (var combi in Combis(n - x))
{
var list = new List<int>() {x};
list.AddRange(combi);
yield return list;
}
}
}
}
}
static void Main(string[] args)
{
var result = Combis(5);
foreach (var list in result)
{
Console.WriteLine($"[{string.Join(" ", list)}]");
}
}
}
}
输出是
[1 1 1 1 1]
[1 1 3]
[1 3 1]
[1 4]
[3 1 1]
[4 1]
我有一个用 Python 语言编写的脚本,我想看看它在 C# 中的样子。
def combis(n):
if n < 0:
return
if n == 0:
yield []
for x in (1, 3, 4):
for combi in combis(n-x):
yield [x] + combi
>>> list(combis(5))
目前我不明白如何在 C# 中实现这段代码,让我分心的是那些产量以及我的方法应该写在哪种类型中。 我目前所拥有的无法正常工作且无法理解
static int[] Combs(int n)
{
int[] tusc = { };
if (n < 0)
yield break;
if (n == 0)
yield return tusc;
int[] X = { 1, 3, 4 };
for(int i = 0; i < X.Length; i++)
{
for(j = 0; j <= Combs(n-X[i]).Length; j++)
{
yield return X + j;
}
}
}
当n等于5时python脚本的输出是:
>>> list(combis(5))
[[1, 1, 1, 1, 1], [1, 1, 3], [1, 3, 1], [1, 4], [3, 1, 1], [4, 1]]
当n等于4时:
[[1, 1, 1, 1], [1, 3], [3, 1], [4]]
using System;
using System.Collections.Generic;
namespace HowToTranslateInCSharp
{
class Program
{
static IEnumerable<List<int>> Combis(int n)
{
if (n >= 0)
{
if (n == 0)
yield return new List<int>();
else
{
foreach (var x in new[] {1, 3, 4})
{
foreach (var combi in Combis(n - x))
{
var list = new List<int>() {x};
list.AddRange(combi);
yield return list;
}
}
}
}
}
static void Main(string[] args)
{
var result = Combis(5);
foreach (var list in result)
{
Console.WriteLine($"[{string.Join(" ", list)}]");
}
}
}
}
输出是
[1 1 1 1 1]
[1 1 3]
[1 3 1]
[1 4]
[3 1 1]
[4 1]