算法,初识空间复杂度、递归

  • Post author:
  • Post category:其他


空间复杂度:用来评估算法内存占用大小的式子

空间复杂度的表示方式与时间复杂度完全一样

算法使用了几个变量: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

示意图如下:先递归,再打印

外框表示函数的执行,长框表示先进入一个函数的调用(递归),窄框表示打印,蓝色箭头表示函数执行的过程,从上到下



版权声明:本文为a768818702原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。