算法:
概念:一个计算的过程,更好的解决问题的方法
时间复杂度: 算法运行时间的一个式子(单位),时间复杂度高的算法比复杂度低的算法慢。
常见的时间复杂度(按效率排序)
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
如何一眼判断时间复杂度?
循环减半的过程O(logn)
几次循环就是n的几次方的复杂度
空间复杂度: 用来评估算法内存占用大小的一个式子
“空间换时间”说法: 一般我们都会牺牲内存来换取算法运行的时间
递归的两个特点:
调用自身
结束条件
递归:练习:图片
def test(n):
if n == 0:
print("我的小鲤鱼", end='')
else:
print("抱着", end='')
test(n-1)
print("的我", end='')
test(5)
尾递归:如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码。尾递归与循环运行的时间差不多
汉诺塔练习:思路:
t = 0 #累计时间
def hanoi(n, A, B, C):
global t
if n > 0:
hanoi(n-1, A, C, B)
t += 1
print("%s -> %s" % (A, C))
hanoi(n-1, B, A, C)
hanoi(8,'A','B','C')
print(t)