一 算法复杂度
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。
空间复杂度:
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。
二 递归
def foo(x): if x == 1: print('foo') else: foo(x-1) print(x) def bar(x): if x == 1: print('bar') else: print(x) bar(x-1) foo(4) print('='*20) bar(4)
感受下输出结果
foo 2 3 4 ==================== 4 3 2 bar
不难理解,递归的是foo或bar,但是常规的前面后面的该执行的还是要执行的呀。
用一个盒子模型,就很明了了。
所以,如果想输入xxxxxxxxxhello,worldooooooooo,类似这样的效果,用递归,可以这样写。
def foo(n): if n == 0: print('hello,world',end='') else: print('xx',end='') foo(n-1) print('oo',end='') foo(4)
输出:
xxxxxxxxhello,worldoooooooo