【python】递归函数

递归定义

递归函数:这个函数在他的内部调用了自身。函数自己调用自己,实现递归。

递归特性:
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。

Python面试题

个人博客:www.langzi.fun
欢迎交流Python开发,安全测试。

猜你喜欢

转载自blog.csdn.net/lzy98/article/details/80078573