递归定义
递归函数:这个函数在他的内部调用了自身。函数自己调用自己,实现递归。
递归特性:
1. 记住所有的递归函数都有一个退出条件
2. 相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
普通算法实现高斯求和:
def sum(munber):
total=0
for i in range(1,munber+1):
total+=i
return total
print sum(100)
运行结果:
5050
如果使用递归方法:
def sum_number(number):
if number==0:
return False
return sum_number(number-1)+number
# 第一次是sum_number(99)+100的值
# 第二次是sum_number(98)+99的值
# 最后一个是sum_number(0)
print sum_number(100)
运行结果:
5050
引申下一个面试题:
res = [lambda x:x+i for i in range(10)]
print res[0](10)
运行结果:
19
解释:
res其实就是[lambda x:x+i,lambda x:x+i,lambda x:x+i,lambda x:x+i,lambda x:x+i,lambda x:x+i,lambda x:x+i,lambda x:x+i,lambda x:x+i,lambda x:x+i]的列表。
res[0]就是取列表的第一个元素,就是–>lambda x:x+i(10)。匿名函数传递参数10,传递给参数x,i的值就是最上面定义的for i in range(10)。
函数在调用的时候才去查找变量,res[0]相当于lambda x:x+i,要求中res[0](10)的10就是传入x的值。i的值在遍历最后的值是9,所以引用i的值就是9。
个人博客:www.langzi.fun
欢迎交流Python开发,安全测试。