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没有其他方法了。