小甲鱼Python学习笔记

课程开篇

  • 讲师:小甲鱼
  • 主题:递归是神马
  • 核心卖点:掌握递归=优秀编程思路,摆脱递归困扰
  • 宣传话术:普通程序员用迭代,天才程序员用递归

递归的定位

  • 归属范畴:算法
  • 语言关联性:非Python语法内容,但各编程语言都会讲解

递归的生活/编程案例

  • 汉诺塔游戏:递归解法比迭代更好理解
  • 树结构定义:递归方式定义更方便
  • 谢尔宾斯基三角形:递归生成的图案
  • 递归自拍:课后作业教手机拍摄方法

递归的编程概念

  • 核心原理:函数调用自身
  • 初学者易错示例:无停止条件的递归函数(如recursion()直接调用自身)
  • Python递归限制:默认最大深度100层
  • 深度修改方法:sys.setrecursionlimit(层数)(不建议设太大)

递归实战:求阶乘

  • 阶乘定义:正整数n的阶乘=1×2×…×n
  • 非递归版本(迭代实现)
    • 函数逻辑:初始化结果为n,通过for循环乘1到n-1的数
    • 输入输出:接收用户输入正整数,输出对应阶乘
  • 递归版本
    • 函数逻辑:n=1时返回1;n≠1时返回n×factorial(n-1)
    • 执行验证:输入5输出120,输入10输出3628800

递归的核心条件

  • 条件1:函数调用自身
  • 条件2:设置正确的返回停止条件(避免死循环)
  • 通俗理解:递归要"去得回",如老和尚讲故事要有结尾

递归的优缺点

  • 优点:代码简洁精炼,特定场景(树、汉诺塔)优势明显
  • 缺点:消耗时间和空间(函数调用的压栈/弹栈操作);无停止条件会导致程序崩溃

课程总结与预告

  • 递归学习意义:初学者的重要台阶
  • 使用原则:恰到好处才是"天才操作",非所有迭代都能替换为递归