递归递归:直接或者间接的调用其他函数

def index():
    print('from index')
    func()
def func():
    print('from func')
    index()

func()

## 递归在实际编码中是不允许出现的,一旦出现了无限递归就会直接报错
## 递归的使用场景

"""
1. 递推
        一层一层的往下寻找答案
2. 回溯
        通过最后一个结果往回寻找最开始的那个答案
        
    递归是必须有结束条件!!!!
"""

# 使用代码实现以上逻辑
def age(n):
    if n == 1:
        return 18
    return age(n-1) + 2  # n=2---》age(1)---->age(2)----->age(3)。。。

res=age(5) # 求第5个人的年龄
print(res)


# 递归实现
def get_list(l):
    for i in l:
        if type(i) is int:
            print(i)
        else:
            get_list(i)
get_list(l)

算法之二分法

算法:就是解决问题的高效办法

算法中的二分法、冒泡排序、选择排序、堆排序、等

# 二分法的使用场景:让你在一个列表中查找某个数字是不是存在
l = [11, 2, 3, 43, 55, 67, 23, 45, 45, 88, 99, 66,]

'''查找66这个数字是否在列表l中'''
1. 实现功能
2. 快速找到

思路:
    遍历列表l一个一个去比较,如果比较到了,就是找到了,否则,就是没找到
    
    for i in l:
        if i == 66:
            print('找到了')
        
二分法的原理:
    1. 列表必须先排序(从小到大,从大到小)
    2. 折半查找
    


    
代码实现二分法(Python代码):
    	l = [11, 2, 3, 43, 55, 67, 23, 45, 45, 88, 99, 66,]

# 1. 排序
l.sort()

# 2. 去列表的中间那个值,然后给66比较
target_num = 200
def my_half(l,target_num):
    if len(l) == 0:
        print('没找到')
        return
    # 3. 取的就是中间的那个索引
    middle_index = len(l) // 2 
    if target_num > l[middle_index]:
        l_right = l[middle_index+1:] 
        print(l_right)
        my_half(l_right, target_num)

    elif target_num < l[middle_index]:
        l_left = l[:middle_index]
        print(l_left)
        my_half(l_left, target_num)
    else:
        print('找到了')

my_half(l, target_num)

三元表达式

# 写一个比较两个数大小的函数,返回大的
def my_max(a, b):
    if a >b:
        return a
    else
        return b
    
# 对于只有二选一的情况,我们推荐使用三元表达式
"""
    语法结构:
        res = 条件成立之后的结果 if 条件 else 条件不成立之后的结果
"""


def my_max(a, b):
    return a if a > b else b
res = my_max(1, 2)


"""还支持嵌套"""
## 不推荐写太多的嵌套,一般两层就够了,超过两层了,建议不这样写,面试的时候:成数非常多
res = 2 if 2 > 10 else ( 10 if False else (100 if 10 > 5 else (2 if False else 1)))
print(res)

列表生成式

names_list = ['k', 'j', 't', 'i']

把列表中得每一个名字后面都拼上后缀_SB
names_list = ['k', 'j', 't', 'i']
# 列表中得每一个名字都拼接上后缀:_SB,除jerry之外

new_list = []
for name in names_list:
    if name == 'jerry':
        new_list.append(name)
        continue
    else:
        new_list.append(name+'_SB')
print(new_list)
res = [name+'_SB' if name != 'jerry' else name for name in names_list]
print(res)

字典生成式、集合生成式(了解)

l1 = ['name', 'age', 'gender']
l2 = ['oscat', 18, 'male']

d= {'name':oscat, age:18, 'gender':'male'}

d = {}
for i in range(len(l1)):
   d[l1[i]] = l2[i]

print(d)

补充一个方法:enumarate

d = {l1[i]:l2[i] for i, j in enumerate(l1)}
print(d) # 0: 'name', 1: 'age', 2: 'gender'}

"""没有元组生成式"""
s = {i for i, j in enumerate(l1)} # 生成器
print(s)

t = (i for i, j in enumerate(l1))
print(t)

冒泡排序的代码

for i in range(len(list1)-1):
    for x in range(i+1,len(list1)):
#对比两个数大小,如果前面比后面大,那么就交换位置
        if list1[i] > list1[x]:
            list1[x],list1[i] = list1[i],list1[x]
print(list1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值