从递归到迭代

2019-02-09  本文已影响0人  不爱钱的张师傅

从递归到迭代。
学过 C 语言的都知道递归函数。
运行起来类似:


递归运行图

递归运行代码时,必须运行到最后一次,才能依次返回。
这样的话,上图可以看作是内存开销。递归几次,就多开几个内存空间,地主家也耗不起啊。
我们不想花费这么大的空间去做。于是我们有了其它方法,比如递推,这里不说。
而 python 中,使用的是迭代器。
如图:


yield

运行到红线处,本该进行递归函数的调用了,我们使用 yield
实现,

  1. 保存当前内容,
  2. 返回当前结果。
  3. 等待下一次调用

这里和递归不同的是,下一次递归调用时,yield 使用的还是这块空间。而递归是新开辟一块空间。
所以迭代在代码上,还需要外部控制,才能获取到下一个结果。
递归只需要一行代码。

fun(n)

而迭代要外部控制

f = fun(n)   # f 获取的是迭代器

while True:
    next(f)

需要一直 next() 才能得到最后一个结果。

也许有不当之处,望指出。

上一篇 下一篇

猜你喜欢

热点阅读