让我们做一个著名的练习, 这可能会成为一个面试问题｡
我们将尝试实现斐波那契数｡
斐波那契数列是这样的｡
第一个数字是零｡
那么第二个数字是1｡
他们总是从01开始｡
那就这样吧｡
我们把零加一等于下一个数｡
我们把一加一等于下一个数｡
我们一个接一个地加, 得到下一个数, 三, 加, 下一个数, 五, 八, 加,
下一个数, 以此类推｡
正如你所看到的, 这个数字呈指数级增长｡
它长得很高, 非常快｡
这种数字在自然界中经常出现｡
但这也是一个有趣的问题, 因为这些数字, 虽然在一开始,
增长非常非常缓慢, 他们变得越来越大, 越来越大, 这成为一个问题, 可以真正占用资源｡
这就是我要你做的｡
我们要创建一个函数｡
纤维蛋白原
这需要一个数字｡
这里这个数就是斐波那契数列的指数.
例如, 如果是第20个数字, 它应该是这样的｡
所以如果我想的话, 就说是20次｡
这样的话, 我要你把这些号码都还回去.
使用发电机｡
所以这是一个接一个的, 直到我们到达这个位置｡
现在有两种方法来做这个｡
你可以用清单来做, 或者我们可以用发电机来做｡
你会注意到, 使用生成器, 要比使用列表容易得多, 因为最终使用列表,
你会耗尽资源｡
我要你们把你们在这里看到的数字, 一直输出到20.
如果你愿意, 你可以继续增加这个数字, 看看会发生什么｡
作为奖励, 您也可以尝试用列表来实现这一点｡
所以它也显示在一个巨大的列表中｡
如果需要, 请在此处暂停视频｡
否则, 我会继续寻找答案｡
首先, 我们要做的是假设A等于0, B等于1｡
所以A和B是数字的开始｡
在这里, 我们要使用排列发生器｡
要循环｡
我们要提供函数的次数｡
现在在这里｡
首先我想让b等于现在或者eh等于, B是, 1, 然后B是下一个数.
还记得斐波那契法则吗？
我们把前两个数字相加得到第三个数字｡
所以我们有一个B来得到下一个数字, 然后有一个B来得到下一个数字｡
然后是B, 得到下一个数字｡
所以我首先要做的是, 产生a, 然后给予我, 不管a是什么, 然后暂停这个函数,
直到下一部分｡
在for循环进入下一部分之后, 我会说我想让A等于B｡
我想让B等于A加B｡
让我们看看这是否有道理｡
我是说, 嘿, 从这个列表中返回或产生a, 所以它一开始是零｡
然后让a等于1, 因为我们要往前走了, 然后让B等于1, 因为A变成了,
然后是之前的.
所以B变成了2｡
如果我们看这里, 这就是为什么我们这里有A和B, 然后我们想移动一个像这样的｡
所以B应该还是1｡
所以我们在这里可能要做的是实际上不修改｡
直到我们能够做A加B｡
那么, 我们如何才能做到这一点？
好吧, 我们可以简单地说｡
比如说一个临时变量, 这个临时变量会保持, 当我们到这里的时候, a的值, 也就是0,
然后我们把A修改为等于1, 然后B会是, 而不是A+, B会是临时变量,
也就是0.
再加上B原来是什么, 就是一｡
我知道这会给予人迷惑｡
你可能想在这里暂停一下, 然后打印出来, 看看到底发生了什么, 但希望我们的函数现在可以工作了｡
如果现在我对fib中的x做一些运算, 比如说100｡
我们把答案打印出来｡
那就打印吧｡
X和我负责这个｡
好吧, 看那个｡
我得到了所有的斐波那契数列｡
如果单击Run, 我们将执行20次, 就像在示例中看到的那样｡
我得到4181｡
所以我是19因为记住我们的计数从零开始｡
从技术上讲, 如果需要, 我们可以在这里执行21, 单击“运行”｡
当她得到六, 七, 六, 五, 这就是我们在这里得到的｡
非常, 非常酷｡
但你可以看到这个数字是如何急剧增加的｡
随着我们人数增加到1000人｡
现在, 如果我们在一个列表中这样做, 它看起来会像这样｡
我们复制这里｡
现在52加上一个列表意味着我们必须在这里添加一个列表｡
而不是屈服, 我们将做结果点追加｡
我们要把a值, 也就是初始值, 加进去.
然后我们要做之前做过的事情｡
所以我们现在不再使用ELT, 而是把它添加到这个列表中, 最后我们返回｡
列表结果｡
现在, 如果我返回这个, 假设fib为2, 给予它100, 我点击run,
让我们用生成器注释掉原始的｡
好吧, 我们应该把这个登出来, 不是吗？
那么让我们来看看打印｡
然后单击“运行”｡
好吧, 我会的
这是一个庞大的名单｡
现在, 如果我们在这里做1000｡
你看到了吗？
花了不少时间｡
如果我们做10,000个呢？
好吧, 我会的
这肯定需要一些时间｡
你可以看到这是多么的困难｡
你知道吗？
我要阻止它｡
回到我们的发电机｡
道｡
让我们在这里做10, 000个｡
让我们来看看10,000看起来如何与发电机｡
它还在努力工作, 但我不会把这些记在记忆里｡
我们一个接一个地拿, 我可以在我们的情况下采取行动, 只是一个接一个地打印｡
这是常见的面试问题｡
我觉得这其实有点不必要的混乱｡
但它确实展示了发电机的力量｡
你可能要看几遍这个视频, 但希望现在你对使用范围和如何使用生成器提高性能有了一点了解｡
下次见｡
再见, 再见, 再见