python递归函数、内置函数

递归函数的特点:

  1,调用自身函数;

  2,有一个结束条件;

  3,但凡是递归可以写的,循环都可以实现;

  4,递归的效率在很多时候会很低;

def f(n):
  if n == 1:
    return 1
  return n*f(n-1)

  斐波那契数列:

#循环实现
def fibo(n):
 
    before=0
    after=1
    for i in range(n-1):
        ret=before+after
        before=after
        after=ret
 
    return ret

  

#递归实现
def fibo_new(n):#n可以为零,数列有[0]
 
    if n <= 1:
        return n
    return(fibo_new(n-1) + fibo_new(n-2))

 内置函数: 

 1, filter(function, sequence) :

  对sequence中的item依次执行function(item),将执行结果为True的item做成一个filter object的迭代器返回。可以看作是过滤函数。

 

str = ['a', 'b','c', 'd']
 def fun1(s):
    if s != 'a':
        return s
ret = filter(fun1, str)
print(list(ret))# ret是一个迭代器对象

2,map(function, sequence) :

  对sequence中的item依次执行function(item),将执行结果组成一个map object迭代器返回.

str = [1, 2,'a', 'b']
def fun2(s):
    return s + "alvin"
ret = map(fun2, str)
print(ret)      #  map object的迭代器
print(list(ret))#  ['aalvin', 'balvin', 'calvin', 'dalvin']

3,reduce(function, sequence, starting_value):

  对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用.

from functools import reduce
def add1(x,y):
    return x + y

print (reduce(add1, range(1, 101)))

 4,lambda 

  匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。

  因为lamdba在创建时不需要命名,所以,叫匿名函数

#通过Reduce函数加lambda表达式式实现阶乘:
from functools import reduce
print (reduce(lambda x,y: x*y, range(1,6)))

  

 

posted on 2019-08-23 21:54  一抹天空  阅读(187)  评论(0编辑  收藏  举报

导航