函数在执行过程中只要遇到return 语句就会停止执行并返回结果
如果一个函数没有return 语句,那么他返回值为none
递归:
特性:
1.必须有一个明确的的结束条件
2.每次进入更深一层的递归的时候,问题规模相对上一次减少
3.递归效率不高,递归层次过多会导致栈溢出(计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一成栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的。所以递归的次数过多,会导致栈溢出)
一:栈溢出
1 def calc(n): 2 print(n) 3 return calc(n+1) 4 5 calc(0) 6 # 没有明确结束条件,函数栈溢出。因为函数被调用,返回一个函数, 7 #进入第二层,如果第二层结束了,第一层也就结束了,但第二层需要等待第三层结束,所以栈溢出
二:递归:(考虑结束条件,和初始条件,不考虑中间过程)
1 def calc1(n): 2 print(n) 3 if n // 2 > 0: 4 return calc1(n // 2) 5 print("->",n) 6 7 calc1(10) 8 9 10 # ============================================================================= 11 # 10 12 # 5 13 # 2 14 # 1 15 # -> 1 16 # =============================================================================
函数式编程: 函数是面向过程程序设计的基本单元。在计算机层次上,汇编语言是最接近计算机的语言。而函数式编程是一种抽象程度很高额编程范式。纯碎的函数式编程编写的函数是没有变量的
python并不是纯碎的函数式编程。函数式编程指的是数学意义上的x,y ,不是之前python中学的函数
高阶函数
变量可以指向函数,函数的参数能接受变量,那么一个函数可以接受另一个函数作为参数,这种函数就称为高阶函数
1 def calc(x,y,f): 2 "add" 3 return f(x)+f(y) 4 5 def fun(x): 6 if x < 0: 7 return -x 8 else: 9 return x # abs求绝对值 10 11 print(calc(-10,5,fun)) 12 13 # ============================================================================= 14 # 15 15 # =============================================================================