聊algo

algo(计算) -> 会关注计算的步骤数 -> 不同的结构会影响步数

  • 线性表(数组,链表)
  • 树(树,二叉树)
  • 哈希

与数学思想相关
汉诺塔问题 -> 归纳

数学解法没考虑的 -> 步数,爆栈

  • 斐波那契数列
    f(0) = 1
    f(1) = 1
    f(n) = f(n - 1) + f(n - 2)

递归下去会有很多重复计算和stackoverflow

  • 循环(迭代)代替递归(解决stackoverflow)
def recsum(x):
  if x == 1:
    return x
  else:
    return x + recsum(x - 1)
recsum(5)
5 + recsum(4)
5 + (4 + recsum(3))
5 + (4 + (3 + recsum(2)))
5 + (4 + (3 + (2 + recsum(1))))
5 + (4 + (3 + (2 + 1)))
5 + (4 + (3 + 3))
5 + (4 + 6)
5 + 10
15

循环(迭代)

for i in range(6):
  sum += i

尾调用
把结果先算出来,作为参数传到递归里

def tailrecsum(x, running_total=0):
  if x == 0:
    return running_total
  else:
    return tailrecsum(x - 1, running_total + x)

前提 写得出来

  • 缓存 (减少重复计算)
    用个哈希表把计算过的结构缓存

你可能感兴趣的:(聊algo)