函数的递归调用,三元表达式,匿名表达式

一.函数的递归调用

1.函数的递归调用:

就是在调用一个函数的过程中又直接或间接地调用自己
案例1:

def foo():
	print('hello')
	foo()
foo()

案例2:间接调用自己

def bar():
	print('from bar')
	foo()
def foo():
	print('hello')
foo()

从案例1,2的运行结果来看,这2个案例相当于死递归,会抛出异常:

这是因为无限的递归会导致内存溢出,所以python设定了最大的递归层数
#
(调用时会开辟一个名称空间,死递归会一直开辟名称空间,导致内存溢出,所以抛出异常)
# python 设定了最大的递归层数,可以自己修改
# import sys
# print(sys.getrecursionlimit())
# print(sys.setrecursionlimit(2000))

所以:不应该无限递归调用下去,应该在满足某种条件下结束递归调用,然后返回

2.递归调用应该分为2个阶段

回溯: 一层层地递归调用下去
递归: 在满足某一条件的情况下结束回溯,然后开始向上一层层返回

案例1:

# salary(5) = salary(4) + 10
# salary(4) = salary(3) + 10
# salary(3) = salary(2) + 10
# salary(2) = salary(1) + 10
# salary(1) = 18


# n=1   salary(n) = 18
# n!=1  salary(n) = salary(n-1) + 10

def salary(n):
	if n == 1:
		return 18
	return salary(n-1) + 10
res = salary(5)
print(res)

案例2:

nums=[111,[222,[333,[444,[555,[666,[777,[888]]]]]]]]

def func(l):
	for x in l:
		if type(x) is list:
			func(x)
		else:
			print(x)
func(nums)

案例3:

# 从小到大排列的一个数字列表
nums=[11,22,33,44,55,60,67,89]

def search_num(l,find_num):
	print(l)
	if len(l) == 0:
		print('数字不存在')
		return
	mid_index = len(l) // 2
	if find_num > l[mid_index]:
		new_nums=l[mid_index+1:]
		search_num(new_nums,find_num)
	elif find_num < l[mid_index]:
		new_nums=l[:mid_index]
		search_num(new_nums,find_num)
	else:
		print('找到了')
search_num(nums,33)

二.三元表达式

基本语法:
表达式1 if 条件 else 表达式2

# 普通写法
def max2(x,y):
	if x > y:
		return x
	else:
		return y

# 三元表达式改写
x = 111
y = 222

res = x if x > y else y
print(res)

三.匿名函数

匿名函数就是没有名字的函数
特点:没有名字意味着只能用一次,用完之后就是垃圾,所以匿名函数只用于临时使用一次的场景
案例1:

res = (lambda x,y:x+y)(1,2)
print(res)
# 此方式过于鸡肋
f = lambda x,y: x+y
print(f)
f(1,2)

案例2:

salaries={
	'egon':4.4,
	'lqz':3.3,
	'yj':2.2
}

# def func(k):
# 	return salaries[k]
# 
# print(max(salaries,key=func))  # key=func是max函数中规定好的

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

print(sorted(salaries,key=lambda k:salaries[k]),reverse=True)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值