空间复杂度:用来评估算法内存占用大小的式子
空间复杂度的表示方式与时间复杂度完全一样
算法使用了几个变量:O(1)
算法使用了长度为n的一维列表:O(n)
算法使用了长度为m行n列的二维列表:O(mn)
递归
递归的两个特点:
1、调用自身
2、结束条件
举例:
def func1(x):
print(x)
func1(x-1)
不是合法的递归,例如,代入x=3,会无限执行下去,没有结束条件;是一个死递归
def func2(x):
if x>0:
print(x)
func2(x+1)
不是合法的递归,看似有结束条件x>0,即当x<=0时结束,x+1会永远大于0,依然不会结束,故相当于没有结束条件
例如,代入x=3,会打印4、5、6、7…,而不会到<0结束
def func3(x):
if x>0:
print(x)
func3(x-1)
是合法的递归,func3先打印,再执行函数;例如,代入x=3,会打印3、2、1
示意图如下:先打印,再递归
外框表示函数的执行,窄框表示打印,长框表示又进入一个函数的调用(递归),蓝线表示函数执行的过程,从上到下
def func4(x):
if x>0:
func4(x – 1)
print(x)
是合法的递归,func4先执行函数,再打印;例如,代入x=3,会打印1、2、3
示意图如下:先递归,再打印
外框表示函数的执行,长框表示先进入一个函数的调用(递归),窄框表示打印,蓝色箭头表示函数执行的过程,从上到下