函数调用自身的过程称为递归。
下面来演示一个阶乘递归函数:
创建一个阶乘函数,输入为 n
如果输入 n=0,则0! = 1
如果输入 n != 0,则n! = n(n-1)!
此外,Fibonacci 递归函数的流程如下所示:
创建一个 Fibonacci 递归函数,输入为 n
创建前两个变量,并为其分别赋值0和1
如果输入 n = 0,则返回0;如果输入 n =1,则返回1;否则,返回 (n-1)+(n-2)
值得注意的是,递归结构需要有一个退出检查,否则函数将进行无限循环。
13、框架 Frames 和栈 Stack 调用Python 代码被加载到堆栈中的框架。
函数及其参数和变量一起被加载到框架中。
框架以正确的执行顺序被加载到堆栈中。
堆栈描述了函数的执行。在函数外声明的变量被存储在 __main__ 中。
堆栈首先执行最后一个框架。
如果遇到运行错误,可以使用回溯 (traceback) 来查找函数列表。
14、集合 Collections列表 Lists
列表是一种能够包含任何数据类型的序列数据结构,这种结构是可变的。
列表可以进行整数索引,可以使用中括号来创建一个列表,如下所示。
使用索引值来添加、更新、删除列表中的项,如下所示。
此外,复制和切片同样适用于列表 (可类比字符串中的操作), 列表还支持排序操作,如下所示。
元组 Tuples
在某种程度上元组和列表类似,都是可以存储任意对象序列的数据结构。
元组的运行比列表更快速。
元组可以进行整数索引
元组是不可变的,如下所示。
值得注意的是,如果一个元组中的元素包含一个列表,那么可以对列表进行修改。同样,当为一个对象赋值并将该对象存储到列表中,随后如果对象发生变化的话,相应地,列表中的对象也会进行更新。
字典 Dictionaries
字典是编程语言中最重要的一种数据结构之一,它能够存储键值对 (key/value) 对象。
字典有许多优点,能够轻松地进行数据检索,如下所示。
可以通过如下方式创建一个字典。