聊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)

前提 写得出来

  • 缓存 (减少重复计算)
    用个哈希表把计算过的结构缓存
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    时光清浅03阅读 3,408评论 0 0
  • 1. 语言基础 1.1 C++的四种类型转换: const_cast => 用于将const变量转为非const;...
    SunnyQjm阅读 4,925评论 0 0
  • Table of Contents Python语言特性1 对Python的理解(对比其他语言)2 什么是Pyth...
    Jeese_zhao阅读 7,588评论 0 5
  • 逻辑回归如何解决过拟合问题?过拟合大部分原因是由于特征过多导致的,我们可以使用以下两种方法来解决过拟合的问题。 减...
    b0591d0dc6ba阅读 9,937评论 0 6
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,287评论 0 4