算法的理解(排序与递归)

程序的使用,最多的还是理解要解决问题的方法。而解决问题的方法,即是算法。

认真理解和学会算法,是最有用的科学。

1、冒泡排序法:a=[11,29,30,44,56,20]

for i in range(len(a)):
… for j in range(len(a)-1-i):
… if a[j]>a[j+1]:
… a[j],a[j+1]=a[j+1],a[j]
… print(a)

[11, 29, 30, 44, 20, 56]
[11, 29, 30, 20, 44, 56]
[11, 29, 20, 30, 44, 56]
[11, 20, 29, 30, 44, 56]

2、递归:当需要解决一个复杂问题,能够将这个问题拆分成若干子问题,函数自己调用自己(子问题),直到条件出口,执行完成。

  • >>> def fox(n):
  • …     if n==1:
  • …             return 1
  • …     else:
  • …             print(n)
  • …             return n+fox(n-1)
  • … 
  • >>> fox(100)
  • 100
  • 99
  • 98
  • 97
  • ……
  • 5050

最典型的是斐波拉切数列:

  • >>> def fibonacci(n):
  • …     if n==1:
  • …             return 1
  • …     elif n==2:
  • …             return 2
  • …     else:
  • …             return fibonacci(n-1)+fibonacci(n-2)
  • … 
  • >>> fibonacci(10)
  • 89
  • >>> fibonacci(3)
  • 3
  • >>> fibonacci(4)
  • 5
  • >>> fibonacci(5)
  • 8

最典型的游戏:汉诺塔游戏

我估计我又要在算法的领域里折腾一段时间了……数学强+算法强,注定软件非常强的。

作为研究方向,有机会就写一本工程领域常用到的算法书。