TestCase 2:
baseChars:['a','b']
所需字符串长度:1
产出:
static IList<string> baseChars = new List<string>() { "0", "1", "2", "3" };
static void CharsRange1(string prefix, int pos)
{
if (pos == 1)
{
foreach (string s in baseChars)
{
Console.WriteLine(prefix + s);
}
}
else
{
foreach (string s in baseChars)
{
CharsRange1(prefix + s, pos - 1);
}
}
}
static IEnumerable<string> CharsRange2(string prefix, int pos)
{
if (pos == 1)
{
foreach (string s in baseChars)
{
yield return prefix + s;
}
}
else
{
foreach (string s in baseChars)
{
// here if i yield return then won't compile
// i thought at the end of recursive loop it will return
CharsRange2(prefix + s, pos - 1);
}
}
}
static void Main(string[] args)
{
//CharsRange1("", 3);//working
foreach (string s in CharsRange2("", 3))
{
Console.WriteLine(s);//nothing
}
Console.WriteLine("end");
Console.ReadKey();
}
有人能帮忙吗?我已经把我的代码放在GitHub里了。如果您可以将我的实现更改为非递归,但保留函数返回类型,也将受到重视。
选项1,从递归调用中产生每个值。
foreach (string s in baseChars)
foreach (var r in CharsRange2(prefix + s, pos - 1))
yield return r;
选项2,重用框架中内置的现有IEnumerable
类型,以完全避免yield返回;
if (pos == 1)
return baseChars.Select(s => prefix + s);
else
return baseChars.SelectMany(s => CharsRange2(prefix + s, pos - 1));
选项3,使用嵌套循环而不是递归方法,留给读者作为练习。
问题内容: 我有一个像这样的递归函数 我正在使用它 我注意到您好永远不会返回,因为我怀疑我在递归调用上创建了多个promise,但是我不确定如何从中返回。 如何返回每个递归创建的Promise? 编辑: 结果是 问题答案: 递归是一种功能性遗产,因此将其与功能性样式一起使用可产生最佳效果。这意味着编写接受和操作其输入(而不是依赖于外部状态)和返回值(而不是依赖于突变或副作用)的函数。 你的程序,而
我有一个像这样的mysql表 但是我无法用这个函数检索“成人”和“儿童”的值 错误日志显示变量被正确地传递给函数: 为什么此函数返回?
问题内容: 我有这段代码,由于某种原因,当我尝试返回路径时,我得到None: 有办法解决吗?提前致谢。 问题答案: 你需要返回递归结果: 否则,该函数仅在执行该语句后结束,导致None返回。 你可能要下降了,总是返回结尾: 因为如果是,False那么你也将在没有功能的情况下结束功能return。如果在这种情况下None递归不是正确的选择,而在返回则不是正确的选择,那么你也需要处理这种边缘情况。
如何获取java主目录? 这样做的时候 一无所获
我的问题是: 接下来我用 它返回[],即不返回任何内容 但是如果我设置cursor=conn.cursor(),同样的查询会返回一些行!怎么了?为什么我不能使用游标?
我有一个递归函数,它会重复这个函数,直到不满足if条件,然后输出一个整数。但是,此函数之外需要整数的函数正在接收一个单位。我应该如何修改代码以返回int? 这就是整个程序 }