17,740
社区成员
发帖
与我相关
我的任务
分享
byte[] str = { 17, 16, 15, 15, 15, 14, 14, 14, 13, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3 };
var results = 排列(str).Take(50).ToArray();
看看 results 是什么类型的?你的问题的设计中,类型说明对吗?static IEnumerable<List<byte>> 排列(byte[] str)
以及测试主程序//byte[] str = { 17, 16, 15, 15, 15, 14, 14, 14, 13, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3 };
byte[] str = {6, 5, 4 };
var n = 0;
foreach (var result in 排列(str))
{
Console.Write("第{0}个结果:", ++n);
foreach (var x in result)
Console.Write("{0} ", x);
Console.WriteLine();
}
其次,你应该整理一下、测试自己有没有在学校里学好“递归”的理论知识和实践。没有这个基础的人基本上都是“混的”,理科考试成绩很差。递归的思路你可以自己用自然语言来解释一下类似下面这样的程序(其实很简单),就看你有没悟性了:static IEnumerable<List<byte>> 排列(byte[] str, int start, int end)
{
if (start == end)
yield return new List<byte> { str[start] };
else
{
yield return new List<byte> { str[start] };
foreach (var r in 排列(str, start + 1, end))
{
yield return r;
var copy = r.ToList();
copy.Insert(0, str[start]);
yield return copy;
}
}
}
static IEnumerable<List<byte>> 排列(byte[] str)
{
if (str.Length > 0)
foreach (var r in 排列(str, 0, str.Length - 1))
yield return r;
}