从递归到迭代。
学过 C 语言的都知道递归函数。
运行起来类似:
递归运行图
递归运行代码时,必须运行到最后一次,才能依次返回。
这样的话,上图可以看作是内存开销。递归几次,就多开几个内存空间,地主家也耗不起啊。
我们不想花费这么大的空间去做。于是我们有了其它方法,比如递推,这里不说。
而 python 中,使用的是迭代器。
如图:
yield
运行到红线处,本该进行递归函数的调用了,我们使用 yield
实现,
- 保存当前内容,
- 返回当前结果。
- 等待下一次调用
这里和递归不同的是,下一次递归调用时,yield 使用的还是这块空间。而递归是新开辟一块空间。
所以迭代在代码上,还需要外部控制,才能获取到下一个结果。
递归只需要一行代码。
fun(n)
而迭代要外部控制
f = fun(n) # f 获取的是迭代器
while True:
next(f)
需要一直 next() 才能得到最后一个结果。
也许有不当之处,望指出。









网友评论