首页 > 其他 > 详细

7.12 函数递归 二分法 三元表达式 列表/字典/元组生成式 常用的内置函数

时间:2019-07-13 09:10:43      阅读:93      评论:0      收藏:0      [点我收藏+]

函数递归

  即函数在调用阶段,直接或间接的又调用自身。

补充

# 查看函数支持的递归上限
import sys
print(sys.getrecursionlimit())  # 不是很精确
# 一般返回的是1000


sys.setrecursionlimit(2000)
# 如果想要修改递归的上限,可以用这个方法改到2000

  函数不应该无限制的递归下去

  递归分为两个阶段
  1.回溯:就是一次次重复的过程,这个重复的过程必须建立在每一次重复问题的复杂度都应该下降
  到有一个最终的结束条件
  2.递推:一次次往回推导的过程

age(n) = age(n-1) + 2  # n > 1
age(1) = 18  # n = 1

# 递归函数
def age(n):
    if n == 1:  # 必须要有结束条件
        return 18
    return age(n-1) + 2
res = age(5)
print(res)  # 26
l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]]
# 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)
def get_num(l):
    for i in l:
        if type(i) is int:
            print(i)
        else:
            get_num(i)  # 这里递归调用自己,就能达到循环的目的
get_num(l)

二分法

算法:解决问题的高效率方法

l = [1,2,4,65,76,123,156,157,235,256,278,301,324,786]

target_num = 66

# 这两个是初始的参数

def get_num(l,target_num):
    print(l)  # 有了这句,每次查找,拆分了列表,都会打印一下列表
    middle_index = len(l)//2  # 这里的l之后会被l_left或者l_right替代
                         # 这样,每次的middle_index都是当前列表的中间的那个
    if not l:  # 这个写法代表判断如果target_num不在列表l里的话
        print(这个表里没有)
        return  # 如果执行到这句,那他的返回值就是None
    if target_num > l[middle_index]:
        l_right = l[middle_index+1:]  # 这里注意既然target_num比l[middle_index]大了,
                       # 那么,l[middel_index]就可以排除掉了,直接从l[middle_index+1]开始比较
        get_num(l_right,target_num)  # 这样就是把l_right当做原来的l传进去了。 # 这里就是递归调用
    elif target_num < l[middle_index]:
        l_left = l[:middle_index]
        get_num(l_left,target_num)
    else:
        print(find it,l[middle_index])
get_num(l,target_num)  # 调用这个函数 # 给这个函数传入两个参数,也就是最上面的两个

技术分享图片
[1, 2, 4, 65, 76, 123, 156, 157, 235, 256, 278, 301, 324, 786]
[1, 2, 4, 65, 76, 123, 156]
[76, 123, 156]
[76]
[]
这个表里没有
target_num=66的结果

技术分享图片
[1, 2, 4, 65, 76, 123, 156, 157, 235, 256, 278, 301, 324, 786]
[1, 2, 4, 65, 76, 123, 156]
[76, 123, 156]
[76]
find it 76
target_num=76的结果

  以上就是二分法的简单应用,二分法可以说是算法里最简单的一种了。

  使用恰当的算法,无疑是可以提高工作效率的。

三元表达式

三元表达式的应用场景比如在以下情况:

要输出两个数里比较大的那个,平常我们需要这么写:

def my_max(x,y):
    if x > y:
        return x
    else:
        return y

但是,如果你使用了三元表达式,就可以精简成这样:

def my_max(x,y):
    res = x if x > y else y
    # 如果if后面的条件成立返回if前面的值 否则返回else后面的值
    print(res)
三元表达式固定表达式
    值1 if 条件 else 值2
        条件成立 值1
        条件不成立 值2
# 三元表达式的应用场景只推荐只有两种的情况的可能下
is_free = input(请输入是否免费(y/n)>>>:)
is_free = 免费 if is_free == y else 收费
print(is_free)


username = input(username>>>:)
res = NB if username == jackMa else normal
print(res)

 

7.12 函数递归 二分法 三元表达式 列表/字典/元组生成式 常用的内置函数

原文:https://www.cnblogs.com/PowerTips/p/11178974.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!