汇总一些困扰了很久的问题


1.消除递归导致堆栈溢出

其实这个问题本来无法避免,因为你模拟调用过程,自己利用私有堆栈,也可硬转成非递归,但是大数据下肯定私有堆栈也会溢出。不过现在有了编译器优化就可以把“尾递归”转化成循环,那么……既然能直接转化成循环,你干嘛还要写成递归,直接写循环多好!编译器也只不过是把入参重新赋值,再goto到开头执行一遍,那么我们自己也可以啊。关键在于把普通递归转化成尾递归,一句话:增加参数,把本次递归产生的变量,传递给下次递归。


2.二叉树排序效率

    我们可以构造一个二叉树,左子树总是比右子树小,于是插入过程中就自动排序好了,那么如果数据插入顺序特别奇葩,比如根节点上就是最大,或者最小的值,那么这种排序就很坑爹了,怎么办呢?一句话:平衡二叉树,插入之后旋转调整一次。


3.vector的容量变化

插入之前:



插入之后:



后来找到MFC的源代码跟踪了一下:



看来很多时候,我们思想都是有“惰性”的,明明代码里面写的清楚,可是自己就懒得看,或许是“求知欲”已经不如学生时代了吧。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值