python函数递归怎么用_python之函数递归调用与函数式

Day07 -函数递归

函数递归调用:是函数嵌套调用的一种特殊形式

具体指的是:在调用一个函数的过程中有直接或间接地调用到本身

递归层级最大1000层,可以设置更大但不建议

import sys

sys.getrecursionlimit()#查看

sys.setrecursionlimit(num)#设置

#调用本身

def f1():

print('是我是我还是我')

f1()

f1()

#间接调用

def f1():

print('f1>>>>')

f2()

def f2():

print('f2>>>>')

f1()

f1()

需要的强调的是:尾递归优化(pyton没有)

递归不应该无限的调用,必须在满足某种条件下结束递归调用(用return)

1.递归的两个阶段

1.1 回溯

​ 一层一层调用下去

1.2 递推

​ 满足某种结束条件,结束递归调用,然后一层一层返回

def age(n):

if n==1:

return 18

return age(n-1)+10

#递归的应用

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

def func(n):

for x in n:

if type(x) is list:

func(x)

else:

print(x)

func(l)

2.二分法(有序列表)

无序列表可以用num.sort()排序

#原始

num=[-3,4,5,30,13,42,53,65,77,98]

find_num=13

for nums in num:

if nums==find_num:

print('find it')

break

def binarry_search(find_num,num):

print(num)

if len(num)==0:

print('值不存在')

return

mid_index=len(num)//2

mid_val=num[mid_index]

if mid_val < find_num:

num=num[mid_index+1:]

binarry_search(find_num,num)

elif mid_val > find_num:

num=num[:mid_index]

binarry_search(find_num,num)

else:

print('find it')

if __name__ == '__main__':

num=[-3,4,5,30,13,42,53,65,77,98]

find_num=9

binarry_search(find_num,num)

3.面向过程的编程思想

核心是"过程"二字,指的是做事的步骤:先什么、在什么、后干什么

基于该思想就好比设计一条流水线

优点:

复杂的问题流程化、进而简单化

缺点:

扩展性差

1.不是所有的软件都需要频繁更迭。比如:编写脚本

2.即便是一个软件需要频繁更迭,也不代表这个软件所有组成部分都需要一起更迭

4.函数式

4.1匿名函数lambda

匿名函数用于临时调用一次的场景:更多的是将匿名与其他函数配合使用

lambda x,y : x+y#只是定义了

#调用匿名函数,内存地址加()

#方法一

res=(lambda x,y : x+y)(1,2)

print(res)

#方法二

f=(lambda x,y : x+y)

res=f(1,2)

print(res)

##########################################

#应用

salaries={

'siry':3000,

'tom':7000,

'lili':10000,

'jack':2000

}

#max和min(可迭代对象,key=函数式)和sorted()函数一样

res=min(salaries,key=lambda k:salaries[k])

print(res)

res=max(salaries,key=lambda k:salaries[k])

print(res)

4.2 map(映射)

map(函数,可迭代对象)

l=['alex','lxx','wxx','Lee']

new_l=[name+'_dsb' for name in l ]

print(new_l)

new_l=map(lambda name: name+'_dsb',l)

print(next(new_l))

print(next(new_l))

print(next(new_l))

print(next(new_l))

4.3 filter(过滤)

l=['alex_sb','lxx_sb','wxx','Lee']

new_l=[i for i in l if i.endswith('sb')]

print(new_l)

new_l=filter(lambda name:name.endswith('sb'),l)

print(new_l)

4.4 reduce

py2内置;py3在functools库中

累加操作

from functools import reduce

res=reduce(lambda x,y:x+y,[1,2,3,4,5,6],10)

print(res)

res=reduce(lambda x,y:x+y,l)

print(res)

标签:函数,递归,python,res,num,print,new,find,lambda

来源: https://blog.csdn.net/qq_41988076/article/details/110733611

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值