首页 > 其他 > 详细

函数递归,三元表达式,生成树,匿名函数

时间:2019-07-12 17:22:48      阅读:63      评论:0      收藏:0      [点我收藏+]

一:递归函数

(1)定义:函数在调用的过程中 直接或者间接调用本身

例如:

  (1)直接调用函数本身

def index():
    print(递归函数)
    index()     # 在函数内部再次调用函数本身
index()

  (2)间接调用函数

def index():
    print(递归函数)
    func()     


def func():
    print(间接调用函数)
    index()     # 调用上输入index 但是index内部又含有本部的函数调用方式
func()

 

(2)函数调用最大深度:

作用:当函数递归调用的时候 在局部依旧会开辟一个名称空间 无限次调度占用内存 为了解决内存占用 python对函数最大递归做了限制

(1)默认最大限制1000 但是不精确 而且可以手动更改最大限制

(2)基本限制范围在997/998左右

例如: 

import sys
sys.getrecursionlimit()

def index(n):
    print(检测递归次数,n)
    index(n+1)  # 每次调用函数次数+1
index(1)        # 检测次数 998

PS:无限制递归相当于死循环没有意义 

 

(3):递归函数调用的过程

  (1)回溯过程:逐层从外向内查找,明确一个结束条件,查找的过程就是逐渐靠近结束条件的过程

  (2)递推过程:从结束条件 向外部逐渐逆推

例如:

  

技术分享图片
‘‘‘
PS:案例一
递归查找年龄的过程
age(5) = age(4) + 2
age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 18
‘‘‘
#
def index(n):
    if n == 1:              # 结束条件
        return 18
    return index(n-1)+2     # 递归调用函数
res = index(5)
print(res)

# PS:案例二 循环打印容器类型
number = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]]
def index(number):
    for i in number:
        if type(i) is int:  # 如果取值的类型是整形打印
            print(i)  
        else:               # 否则重新调用函数进行打印 
            index(i)
index(number)
函数递归

 

二:算法之二分法

算法:能够高效率的解决某些问题

例如:

l = [1,3,5,12,57,89,101,123,146,167,179,189,345]
num = 167
for i in l:
    if num == i:
        print(找到啦)
# PS:如果数字在尾部 依次循环打印效率会很低

二分法:

基本思路:

(1)必须有有大小顺序

(2)从中间将列表切分 取出中间值 和目标值进行比较 通过比较如果相等直接切分 否则继续切分比较

例如:

  

技术分享图片
l = [1,3,5,12,57,89,101,123,146,167,179,189,345]
target_num = 101
def index(l,target):
    middle_num = len(l)//2                 # 将列表平均切分
                                            
    if target_num > l[middle_num]:        # 比较目标函数和中间函数大小
        num_right = l[middle_num + 1:]    # 大于则向右边切分
        index(num_right,target_num)       # 再次比较切分之后的大小

    elif target_num < l[middle_num]:
        num_left = l[0:middle_num]
        index(num_left,middle_num)

    else:
        print(find it)
index(l,target_num)                     # find it
二分法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

函数递归,三元表达式,生成树,匿名函数

原文:https://www.cnblogs.com/SR-Program/p/11177278.html

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