递归”和“迭代”

递归”和“迭代”的区别如下:

1、递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合。

2、迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B。

3、递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出。 



imap的使用,其中对于iterator的理解可以借助这个例子:

imap(fun,iterator)
返回一个迭代器,对iterator中的每个项目调用fun
  1. import itertools
  2. listone = [ 'a', 'b', 'c']
  3. listtwo = [ '11', '22', 'abc']
  4. listthree = [ 1, 2, 3]  #叫做迭代器。
  5. def funAddFive(x):
  6. return x +  5
  7. for item  in itertools.imap(funAddFive,listthree):
  8. print (item)
返回:6 7 8  对listthree中的元素每个加了5后返回给 迭代器 (容器 item)


#迭代器    他的写法是个类   要初始化 __init__,要迭代 __iter__,有next方法__next__
class Fib:
    def __init__(self):
        self.prev=0
        self.curr=1
    def __iter__(self):
        return self
    def __next__(self):
        value=self.curr
        self.curr += self.prev
        self.prev = value
        return value
    
f=Fib()
list(islice(f,0,10))


#生成器     他的写法是个函数  返回的时yield(产量) curr的值
def fib():
    prev,curr=0,1
    while True:
        yield curr
        prev,curr = curr,curr+prev


f=fib()

list(islice(f,0,10))

yield 并不产生值,只是存取值


猜你喜欢

转载自blog.csdn.net/zzx3163967592/article/details/80976876