day3-递归、函数式编程、高阶函数

一、递归

递归函数:在内部调用自身的函数

 1 def calc(n):
 2     print(n)
 3     if int(n/2) ==0:
 4         return n
 5     return calc(int(n/2))
 6 
 7 calc(10)
 8 
 9 >>> 
10 10
11 5
12 2
13 1

递归特性:

1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)
这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。
由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出,递归最大为999层)

二、 函数式编程

函数:是定义一段代码的执行过程

函数式编程:输入是确定的,输出也是确定的

函数式编程中的函数这个术语不是指计算机中的函数(实际上是Subroutine),而是指数学中的函数,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态。比如sqrt(x)函数计算x的平方根,只要x不变,不论什么时候调用,调用几次,值都是不变的。

Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

三、高阶函数
高阶函数:把函数本身当做一个参数,传到另一个函数中,然后在这个函数中做处理
1 def add(a,b,f):
2     return f(a) + f(b)
3 
4 res = add(3, -6, abs)
5 print res
6 
7 >>> 
8 9

 

posted @ 2017-06-22 10:51  不知所以  阅读(63)  评论(0)    收藏  举报