C# IEnumerable yield and recursion-donds';行不通
我试图做一些结合使用收益率和递归的事情,但我真的不明白为什么它不起作用 因为我的代码很复杂,所以我用斐波那契级数生成了一个简单的例子:C# IEnumerable yield and recursion-donds';行不通,c#,recursion,ienumerable,yield,C#,Recursion,Ienumerable,Yield,我试图做一些结合使用收益率和递归的事情,但我真的不明白为什么它不起作用 因为我的代码很复杂,所以我用斐波那契级数生成了一个简单的例子: private IEnumerable<int> fib() { int a1 = 1, a2 = 1; return fibRec(a1, a2); } private IEnumerable<int> fibRec(int
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);
}
递归调用不“起作用”。我得到了第一个有效的收益,我真的不明白为什么当我再次尝试调用自己时,这种情况突然停止了。
使用“while(true)”和无递归调用执行此操作会很好。
您需要迭代递归调用返回的可枚举项,并显式地返回每个项
private IEnumerable<int> fibRec(int a, int b)
{
int tmp = a;
a = b;
b = tmp + b;
yield return a;
foreach(int val in fibRec(a, b))
{
yield return val;
}
}
private IEnumerable fibRec(int a,int b)
{
int tmp=a;
a=b;
b=tmp+b;
收益率a;
foreach(以纤维(a、b)表示的内部值)
{
收益率;
}
}
您需要迭代递归调用返回的可枚举项,并显式地返回每个项
private IEnumerable<int> fibRec(int a, int b)
{
int tmp = a;
a = b;
b = tmp + b;
yield return a;
foreach(int val in fibRec(a, b))
{
yield return val;
}
}
private IEnumerable fibRec(int a,int b)
{
int tmp=a;
a=b;
b=tmp+b;
收益率a;
foreach(以纤维(a、b)表示的内部值)
{
收益率;
}
}
您需要迭代递归调用返回的可枚举项,并显式地返回每个项
private IEnumerable<int> fibRec(int a, int b)
{
int tmp = a;
a = b;
b = tmp + b;
yield return a;
foreach(int val in fibRec(a, b))
{
yield return val;
}
}
private IEnumerable fibRec(int a,int b)
{
int tmp=a;
a=b;
b=tmp+b;
收益率a;
foreach(以纤维(a、b)表示的内部值)
{
收益率;
}
}
您需要迭代递归调用返回的可枚举项,并显式地返回每个项
private IEnumerable<int> fibRec(int a, int b)
{
int tmp = a;
a = b;
b = tmp + b;
yield return a;
foreach(int val in fibRec(a, b))
{
yield return val;
}
}
private IEnumerable fibRec(int a,int b)
{
int tmp=a;
a=b;
b=tmp+b;
收益率a;
foreach(以纤维(a、b)表示的内部值)
{
收益率;
}
}
这里有一个可行的解决方案。我认为您对yield return的作用有点困惑-它只在当前执行的方法返回的序列中产生一个值。回答SO问题。@FarhadJabiyev-我认为我的问题是由于范围问题,我不知道yield只在当前的exe中工作。方法。谢谢。@Amiros不客气。祝你好运。这里有一个有效的解决方案。我认为您对yield return的作用有点困惑-它只在当前执行的方法返回的序列中产生一个值。回答SO问题。@FarhadJabiyev-我认为我的问题是由于范围问题,我不知道yield只在当前的exe中工作。方法。谢谢。@Amiros不客气。祝你好运。这里有一个有效的解决方案。我认为您对yield return的作用有点困惑-它只在当前执行的方法返回的序列中产生一个值。回答SO问题。@FarhadJabiyev-我认为我的问题是由于范围问题,我不知道yield只在当前的exe中工作。方法。谢谢。@Amiros不客气。祝你好运。这里有一个有效的解决方案。我认为您对yield return的作用有点困惑-它只在当前执行的方法返回的序列中产生一个值。回答SO问题。@FarhadJabiyev-我认为我的问题是由于范围问题,我不知道yield只在当前的exe中工作。方法。谢谢。@Amiros不客气。祝你好运,这是我不想做的事。有什么方法可以做我早些时候想做的或类似的事情吗?@Amiros没有其他方法。这是我不想做的事情。有什么方法可以做我早些时候想做的或类似的事情吗?@Amiros没有其他方法。这是我不想做的事情。有什么方法可以做我早些时候想做的或类似的事情吗?@Amiros没有其他方法。这是我不想做的事情。有什么方法可以做我早些时候想做的事情或类似的事情吗?@Amiros没有其他方法了。