python第五天笔记

递归(recursion)

什么是递归:函数自身调用自身

注意:递归必须要存在终止条件,否则就是一个死循环,而且递归是自身调用自身

    在java等编程语言,如果递归没有终止条件,或者递归的层数太深,则可能出现Stack Overflow Error 
    错误,该错误表示栈溢出错误(栈的内存空间不够了)

    但是python、JavaScript等编程中,一般都会规定递归的层数,默认都是1000层
    也可以修改默认的层数:
    import sys
    sys.getrecursionlimit()        # 获取默认的递归层数
    sys.setrecursionlimit(num)    # 重新设置递归的最深层数

 
递归的实际使用
    斐波那契数列:从第三个数开始,每一个是前两项数之和


课堂练习:
    1、上楼梯问题:
        有人上楼梯,每一次可以上一个台阶或者两个台阶,问:当到达第n个台阶时,共有多少种走法?


    2、不死兔子,小明高考结束,考上了清华,父母很开心,所以买了一对刚刚出生的兔子
       一对刚刚出生的兔子,经过四个月的成长就可以成长成年兔子,成年兔子每个月生一对兔子
       假设兔子一直不死,问,当第n月时,共有多少对兔子?
    3、汉诺塔 

容器篇:
    变量这种存储单个数据的容器,也会提供存储多个数据容器
    线性容器:
        数组(Array):连续内存
        链表(List):python list的容器,底层使用的就是双向链表结构
        栈(Stack):先进后出
        队列(queue):先进先出
    hash表:
        
list:
    列表,是一种线性结构的容器,底层使用的双向链表结构设计

定义一个list容器:
    利用弱数据类型语言的特点:直接将[]这种列表数据赋给变量,则变量就是list类型
        ls = [1, 2, 3, 3, 445]
    也可以使用全局函数list
        ls = list()
        ls = list([1, 2, 3, 3, 445])

访问列表中的元素:
    因为list是有序的线性结构,因此每一个都是存在下标(索引)的,所以可以直接通过下标来访问
    列表对象[下标]    # 获取变量对应的元素
    注意:下标从0开始

得到list中的元素个数:
    len(列表对象)        # 返回对象的元素个数

列表的遍历:
    for 临时变量 in 容器:
        每一次循环得到一个元素,被保存到临时变量中

    也可以使用while,通过索引获取


list列表的常见方法:
    dir(模块/对象)            # dir全局函数可以打印输出模块或者对象的方法或者属性
    help(方法)            # 返回帮助文档
    ['append', 'clear', 'copy', 'count', 'extend', 'index',
    'insert', 'pop', 'remove', 'reverse', 'sort']

    |-- append(新元素)        # 在尾部添加新元素
    |-- insert(index, 新元素)    # 在index位置添加新元素
    |-- extend(列表)        # 合并列表
    |-- clear()            # 清空列表
    |-- pop()            # 删除最后一个元素,并返回它
    |-- remove(元素)        # 删除对应的元素
    |-- index(元素)            # 返回元素的下标索引
    |-- count(元素)            # 统计某个元素在列表中的数量
    |-- reverse()            # 翻转列表
    |-- sort()            # 数据的类型必须相同
    |-- copy()            # 复制list对象

 expend-----继承


    
set(集合):
    set是一种无序的集合,是一种hash表(哈希表)的实现,所以具备如下特点:
        1、无序
        2、不重复

定义一个set:
    s = {必须有元素}        # 注意,不要使用空的{},这样定义的是dict
        

常见方法:
    ['add', 'clear', 'copy', 'difference', 'difference_update',
    'discard', 'intersection', 'intersection_update', 'isdisjoint',
    'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 
    'symmetric_difference_update', 'union', 'update']

    |-- add(新元素)            # 添加新的元素
    |-- clear()            # 清空集合
    |-- copy()            # 浅拷贝set
    |-- difference()        # 求两个集合的差集
    |-- union            # 求两个集合的并集
    |-- intersection        # 求两个集合的交集
    |-- remove()            # 移除元素,如果该元素不存在,则抛出错误
    |-- pop()            # 随机移除一个元素
    |-- discard()            # 移除元素,如果该元素不存在,则什么都不做


tuple(元组):
    不可变数据类型,类似于其他编程语言中的枚举类型
    代表一组固定不变的
    |-- index(元素)            # 返回元素的下标索引
    |-- count(元素)            # 统计某个元素在列表中的数量

dict(字典):
    ['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
    
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值