【发布时间】:2014-06-28 15:38:55
【问题描述】:
我正在尝试做一些结合使用 yield 和递归的事情,但我真的不明白为什么它不起作用。
由于我的代码很复杂,我用斐波那契数列生成了一个简单的示例:
private IEnumerable<int> fib()
{
int a1 = 1, a2 = 1;
return fibRec(a1, a2);
}
private IEnumerable<int> fibRec(int a, int b)
{
int tmp = a;
a = b;
b = tmp + b;
yield return a;
fibRec(a, b);
}
现在,我知道有 1000 种解决斐波那契的方法,但这不是这里的交易。 这只是一个例子。
这是我的电话:
var nums = fib().Take(50).ToList();
递归调用“不起作用”。
我得到了第一个正常工作的收益,我真的不明白为什么当我再次尝试调用自己时它突然停止了。
使用“while(true)”执行此操作并且没有递归调用就可以了。
【问题讨论】:
-
这是一个可行的解决方案。 stackoverflow.com/questions/406446/…
-
我认为你对 yield return 的作用有点困惑 - 它只在返回的序列中产生一个值
by the currently-executing method.Jon Skeet's 来自this SO question的回答。 -
@FarhadJabiyev - 我认为我的问题是由于范围问题,我不知道 yield 仅在当前 exe 中有效。方法。谢谢。
-
@Amiros 欢迎您。祝你好运。
标签: c# recursion ienumerable yield