1.递归函数
• 在写递归函数时要有一个明确的结束条件;
• 在递归时,问题规模要越来越小;
• 递归函数效率不高,函数调用是通过栈的数据结构实现的,
每调用依次,栈就会多一层,最多999层,否则会出现栈溢出。
####### 实例 #######
1)递归求阶乘
def fact(n):
if not isinstance(n, int):
print 'ERROR'
else:
if n == 1:
return 1
return fact(n-1)*n
print fact(5)
结果:120

2)实现二分的效果
def fun(n):
if not isinstance(n, int):
print 'ERROR'
else:
print n
b = int(n/2)
if b>0:
return fun(b)
fun(10)
结果:10
5
2
1

面向过程编程语言:c
面向函数编程语言:lisp,erlang
面向过程:
a = 13 + 10
b = a * 2
c = b -8
面向函数:
result = jian(multipy(add(13,10),2),8)
3. 高阶函数
函数可以当作参数去传递
def fun1(x,y,fun):
return fun(1,2)
print fun1(1,2,max)
结果:2

• 在写递归函数时要有一个明确的结束条件;
• 在递归时,问题规模要越来越小;
• 递归函数效率不高,函数调用是通过栈的数据结构实现的,
每调用依次,栈就会多一层,最多999层,否则会出现栈溢出。
####### 实例 #######
1)递归求阶乘
def fact(n):
if not isinstance(n, int):
print 'ERROR'
else:
if n == 1:
return 1
return fact(n-1)*n
print fact(5)
结果:120
2)实现二分的效果
def fun(n):
if not isinstance(n, int):
print 'ERROR'
else:
print n
b = int(n/2)
if b>0:
return fun(b)
fun(10)
结果:10
5
2
1
2.函数式编程
面向对象编程语言:java,c++, python面向过程编程语言:c
面向函数编程语言:lisp,erlang
面向过程:
a = 13 + 10
b = a * 2
c = b -8
面向函数:
result = jian(multipy(add(13,10),2),8)
3. 高阶函数
函数可以当作参数去传递
def fun1(x,y,fun):
return fun(1,2)
print fun1(1,2,max)
结果:2