学习递归函数之前应该了解的前提:
首先了解下面这个函数:
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...
运行过程:
递归函数:
如果一个函数在内部调用自身本身,这个函数就是递归函数。
在使用递归时,需要注意以下几点:
(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
----->
----->
运行过程
二、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
运行过程:
练习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
内置函数
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]