函数的补充知识

递归函数

定义:在函数运行中,直接或间接调用了自身的函数。

( 官网表示:默认的最大递归数为1000,可使用sys.getrecursionlimit查看 )

ps: 如果想修改递归数可使用sys.setrecursionlimit(修改的次数) 进行修改

 注:需要先使用 import sys 安装sys后才可操作。 

函数的补充知识

 

 

 

 递归: 

    1.递推

      一层一层往下推导(每次递推后复杂程度相较于上次会有所下降)

    2.回溯

      依据最后得结论推导出最初需要的答案

      (递归一定要有结束条件)

 

# 伪代码:可能无法运行,但可表达逻辑
# age(5) = age(4) + 2
# age(4) = age(3) + 2
# age(3) = age(2) + 2
# age(2) = age(1) + 2
# age(1) = 18   0
# 由(1)的岁数推出(5)的岁数
def get_name(n):
    if n == 1:
        return 18
    return get_name(n - 1) + 2
print(get_name(5))

 

算法之二分法

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

二分法:入门最简单的级别

使用条件:数据必须是有序的

(一般将数据一分为二后,从最后一个开始对比,不成功再将二分之一的数据再次分为二等分再比较直至找出)

l = [23, 56, 76, 87, 98, 123, 445, 657, 887, 954, 988]
# 找出445
# plan 1 :使用for循环
for i in l:
    if i == 445:
        print('找到了')
    else:
        continue
# plan2: 使用二分法
def my_plan(target_num, l):
    if len(l) == 0:   # 找不到后则退出
        print('抱歉,没有该数据')
        return
    middle_index = len(l) // 2  # 先获取中间位置的索引值
    # 判断是大是小  
    if target_num > l[middle_index]:  # 说明寻找的元素可能在右侧
        l_right = l[middle_index + 1:]
        print(l_right)
        my_plan(target_num, l_right)
    elif target_num < l[middle_index]:  # 说明寻找的元素可能在左侧
        l_left = l[:middle_index]
        print(l_left)
        my_plan(target_num, l_left)
    else:
        print('找到了', target_num)

my_plan(445, l)  # 在()内输入想寻找的数据即可


# 如果要查找的数据在开头,二分法则没有for循环效率快

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:CCF认证 2019-3 小中大


下一篇:Struts2学习四----------动态方法调用