python基础:递归函数

学习递归函数之前应该了解的前提:
首先了解下面这个函数:

def func1():
    print('func1...')
def func2():
    print('func2...start')
    func1()
    print('func2...end')
def func3():
    print('func3...start')
    func2()
    print('func3...end...')
func3()

运行结果:

func3...start
func2...start
func1...
func2...end
func3...end...

运行过程:

python基础:递归函数

递归函数:
如果一个函数在内部调用自身本身,这个函数就是递归函数。
在使用递归时,需要注意以下几点:
(1).自己调用自己。
(2).必须有一个明确的递归结束条件,称为递归出口。

练习1:使用递归函数向控制台打印3,2,1

def print_num(num):
    print(num)
    # 出口
    if num == 1:
        return
    num = num - 1
    print_num(num)  # 调用自己
    print('---->>>')
print_num(3)

运行结果:

3
2
1
----->
----->

运行过程python基础:递归函数

二、1到10的阶乘 123*4…10

def jiecheng(num):
    if num == 1:
        return 1
    ret = jiecheng(num - 1)
    return num * ret
num = jiecheng(3)
print(num)

运行结果:

6

运行过程:

python基础:递归函数

练习3:查找数字:通过程序查找输入的number值。
1,2,3,4,5,6,7,8,9,10

def search_num(number, start, end):
    if number == start:
        return start
    else:
        # 获得中间值
        middle = (start + end) // 2
        if middle <= number:
            return search_num(number, middle, end)
        else:
            return search_num(number, start, middle)
ret = search_num(2, 1, 4)
print(ret)     #最终输出结果为2

python基础:递归函数

内置函数
Abs() 函数 max() 函数、map() 函数、filter() 函数,zip() 函数

1、abs()函数
求数字的绝对值

ret = abs(-21)
print(ret)    #21

2、max()函数
max(iterable, key, default) 求迭代器的最大值,
其中iterable 为迭代器,max会for i in … 遍历一遍这个迭代器,
然后将迭代器的每一个返回值当做参数传给key=func 中的func(一般用lambda表达式定义) ,然后将func的执行结果传给key,然后以key为标准进行大小的判断。

(1)简单使用max() 函数

ret = max(1, 2, 3)
print(ret)    # 3

(2)使用key 关键字
key =函数名称,—>指定求最大值的规则

ret = max(1, 2, -3, key=abs) #使用关键字指定规则:指定以绝对值比较大小
print(ret)   # -3

(3)根据name和price 返回最大的信息

lst = [
    {'name': 'egon', 'price': 100},
    {'name': 'rdw', 'price': 666},
    {'name': 'zat', 'price': 1}
]
ret=max(lst) #报错,字典之间不能进行比较
print(ret)
根据name返回最大信息
def max_name(dic):
	return dic['name']  #返回字典name对应的值
ret=max(lst,key=max_name)
print(ret)   # {'name': 'zat', 'price': 1}

根据price返回最大信息:
def max_price(dic):
    return dic['price']
ret=max(lst,key=max_price)
print(ret)    # {'name': 'egon', 'price': 100}

map()函数
有两个参数,第一个参数是一个函数,第二个参数是可迭代的内容。
函数会依次作用在可迭代内容的每一个元素上进行计算,然后返回一个新的可迭代内容。

lst=[1,3,5]
def square(num):
    num2=num**2
    return num2
ret=map(square,lst) #迭代器1,4,16
for i in ret:
    print(i)

ret=list(map(square,lst))
print(ret)

运行结果:

1
9
25
[1, 9, 25]

如果返回一个列表,我们可以会直接打印变量,查看列表中的内容
如果返回一个迭代器,我们需要循环遍历这个迭代器,依次取出内容

4.filter() 函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进判,
然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

1.过滤出列表中的所有奇数:

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def odd(num):
    if num %2==1:
        return True
    else:
        return False


ret=list(filter(odd,lst))
print(ret)

运行结果:

[1, 3, 5, 7, 9]