C#通过递归获取斐波那契IEnumerable <int>。我希望它返回所有数字,而不仅仅是最后一个

乔吉·伊萨阿什维利(Giorgi Isaiashvili)
static IEnumerable<int> FibonacciByLength(int length)
    {
        if (length <= 1)
            yield return 1;
        else
            yield return FibonacciByLength(length - 1).Last() + 
         FibonacciByLength(length - 2).Last();
    }

这段代码仅返回最后一个值,但我希望它返回所有这些值。

马克

如果您不受传递给方法的参数的限制,建议您执行以下操作

    static IEnumerable<int> FibonacciByLength(int maxValues, int valuesCalculatedSoFar = 0, int previousValue1 = 0, int previousValue2 = 0)
    {
        int nextValue;

        if (valuesCalculatedSoFar < 2)
        {
            nextValue = 1;
        }
        else
        {
            nextValue = previousValue1 + previousValue2;
        }

        yield return nextValue;

        valuesCalculatedSoFar++;

        if (valuesCalculatedSoFar < maxValues)
        {
            foreach(var value in FibonacciByLength(maxValues, valuesCalculatedSoFar, previousValue2, nextValue))
            {
                yield return value;
            }
        }
    }

您将使用哪个来调用

    var values = FibonacciByLength(10).ToList();

这样做的原因是您避免不必要的呼叫。使用此方法,如果要计算斐波纳契序列的前10个值,它将仅调用FibonacciByLength 10次。在对FibonacciByLength的每次调用中,您都传递了计算下一个值所需的值,因此您不必重新计算它。

使用Arturo建议的方法,您将调用2089次。这是因为有多个调用,例如FibonacciByLength(length-1).Last(),这需要重新计算整个序列直到传入的长度才得到最后一个值。如果您只能传递长度值,则没有其他选择,必须忍受将要进行的指数级呼叫。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring Integration:获取聚合中涉及的所有标头,而不仅仅是最后一个

来自分类Dev

pugixml-获取所有文本节点(PCDATA),而不仅仅是第一个

来自分类Dev

获取JavaScript以选择所有元素,而不仅仅是第一个

来自分类Dev

C#List <T> RemoveAt(int32)函数删除2d列表中每个列表的所有索引,而不仅仅是指定的列表

来自分类Dev

是否可以通过if then命令检查多个变量,而不仅仅是一个

来自分类Dev

使用querySelectorAll获取具有该类名称的所有元素,而不仅仅是第一个

来自分类Dev

如何通过defusedxml从AWS SQS API字节xml字符串响应中读取所有行,而不仅仅是第一个?

来自分类Dev

在数组上使用indexOf方法,获取所有索引,而不仅仅是第一个

来自分类Dev

返回斐波那契数列 c#

来自分类Dev

路由服务v8 API问题-不仅仅是一个航点/通过?

来自分类Dev

以编程方式获取TFS变更集的所有文件(而不仅仅是增量)

来自分类Dev

获取所有重复的记录,而不仅仅是它们的列表

来自分类Dev

有没有一种方法可以获取给定subreddit的所有帖子,而不仅仅是一个月以上的帖子?

来自分类Dev

Python服务器从所有连接的客户端获取recv,而不仅仅是从第一个连接的客户端获取recv

来自分类Dev

LeetCode 509:斐波那契数字“ int对象不可下标”

来自分类Dev

递归求解斐波那契数列,无需先验数字

来自分类Dev

输入数字并递归输出斐波那契数Perl

来自分类Dev

没有递归线性的斐波那契算法?

来自分类Dev

带有变体的递归斐波那契算法

来自分类Dev

没有递归线性的斐波那契算法吗?

来自分类Dev

Laravel-获取所有记录而不仅仅是第一条并汇总在一起吗?

来自分类Dev

如何在django中获取相关模型的所有字段而不仅仅是id

来自分类Dev

使用 tweepy 和 python 从推文中获取额外的图像 url(即不仅仅是第一个)

来自分类Dev

为什么获取会返回“ TypeError:无法获取”,而不仅仅是“无法获取”?

来自分类Dev

如何在C#中打印斐波那契数列的后n个数字?

来自分类Dev

检查arraylist是否是斐波那契序列C#的一部分

来自分类Dev

斐波那契数列:所有数字的总和

来自分类Dev

斐波那契数字的顺序-Prolog

来自分类Dev

斐波那契数字-输入

Related 相关文章

  1. 1

    Spring Integration:获取聚合中涉及的所有标头,而不仅仅是最后一个

  2. 2

    pugixml-获取所有文本节点(PCDATA),而不仅仅是第一个

  3. 3

    获取JavaScript以选择所有元素,而不仅仅是第一个

  4. 4

    C#List <T> RemoveAt(int32)函数删除2d列表中每个列表的所有索引,而不仅仅是指定的列表

  5. 5

    是否可以通过if then命令检查多个变量,而不仅仅是一个

  6. 6

    使用querySelectorAll获取具有该类名称的所有元素,而不仅仅是第一个

  7. 7

    如何通过defusedxml从AWS SQS API字节xml字符串响应中读取所有行,而不仅仅是第一个?

  8. 8

    在数组上使用indexOf方法,获取所有索引,而不仅仅是第一个

  9. 9

    返回斐波那契数列 c#

  10. 10

    路由服务v8 API问题-不仅仅是一个航点/通过?

  11. 11

    以编程方式获取TFS变更集的所有文件(而不仅仅是增量)

  12. 12

    获取所有重复的记录,而不仅仅是它们的列表

  13. 13

    有没有一种方法可以获取给定subreddit的所有帖子,而不仅仅是一个月以上的帖子?

  14. 14

    Python服务器从所有连接的客户端获取recv,而不仅仅是从第一个连接的客户端获取recv

  15. 15

    LeetCode 509:斐波那契数字“ int对象不可下标”

  16. 16

    递归求解斐波那契数列,无需先验数字

  17. 17

    输入数字并递归输出斐波那契数Perl

  18. 18

    没有递归线性的斐波那契算法?

  19. 19

    带有变体的递归斐波那契算法

  20. 20

    没有递归线性的斐波那契算法吗?

  21. 21

    Laravel-获取所有记录而不仅仅是第一条并汇总在一起吗?

  22. 22

    如何在django中获取相关模型的所有字段而不仅仅是id

  23. 23

    使用 tweepy 和 python 从推文中获取额外的图像 url(即不仅仅是第一个)

  24. 24

    为什么获取会返回“ TypeError:无法获取”,而不仅仅是“无法获取”?

  25. 25

    如何在C#中打印斐波那契数列的后n个数字?

  26. 26

    检查arraylist是否是斐波那契序列C#的一部分

  27. 27

    斐波那契数列:所有数字的总和

  28. 28

    斐波那契数字的顺序-Prolog

  29. 29

    斐波那契数字-输入

热门标签

归档