见习魔法师


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

理解尾递归

发表于 2018-03-12 | 分类于 Python

知乎上关于尾递归的讨论

尾递归就是操作的最后一步是调用自身的递归。

觉得上面的论述十分清晰,以廖雪峰的官方网站-递归函数里面的例子为例:
求一个数字的阶乘

1
2
3
4
5
def fact(n):
if n == 1:
return 1
# 最后一步调用不是调用自身,而是一个数字和自身调用结果乘积的表达式
return n * fact(n-1)

优化为尾递归

1
2
3
4
5
6
7
8
def fact(n):
return fact_inter(n,1)
def fact_inter(n, m):
if n == 1
return m
# 最后一步调用是调用自身
return fact_inter(n - 1, m * n)

尾递归在一些编译器中会做优化,防止栈内存爆掉。因为尾递归调用之后不依赖上次调用的环境(资源),如上述代码最后一步,每次调用都会把计算的值存储在变量 m 中,不会等到最后一层调用完毕之后再释放资源。

关于仪式感

发表于 2017-12-31 | 分类于 随笔

2017 年就要过去了,还是要总结一下。

阅读全文 »

cell中使用定时器

发表于 2017-12-16 | 分类于 iOS

cell 中使用定时器的小探索

阅读全文 »

区间合并

发表于 2017-12-15 | 分类于 iOS

最近搞个新项目,涉及到区间合并的问题。

阅读全文 »

使用block简化API设计

发表于 2017-11-01 | 分类于 iOS

使用 block 简化 API 设计的小技巧。

阅读全文 »

博客收集

发表于 2017-09-28

备忘录

阅读全文 »

NexT主题设置

发表于 2017-09-05 | 分类于 Hexo

最近博客主题换成NexT,记录一下主题使用过程中遇到的小问题。

阅读全文 »

使用dumpdecrypted砸壳微信

发表于 2017-09-01 | 分类于 逆向

查看APP UI使用Reveal,但是想看一些代码的头文件,则需要使用class-dump。之前看一些APP的头文件偷懒都是直接在某助手上直接下载的砸壳成功的文件,今天有时间,手动试一下砸壳,参考文章:
iOS安全—dumpdecrypted APP砸壳

阅读全文 »

最近生活的总结

发表于 2017-08-31 | 分类于 随笔

最近公司刚搬到滨江,也刚发布了项目,加之前一段时间参加了一个线下的iOS逆向开发者聚会,大家聊了一个关于职业规划的问题,有些感受。

阅读全文 »

关于OC运行机制的几篇博客

发表于 2017-08-31 | 分类于 iOS

整理一下讲解OC语言相关博客

阅读全文 »
12…4
jiangdaohong

jiangdaohong

32 日志
5 分类
15 标签
GitHub Twitter 微博
© 2016 - 2018 jiangdaohong
由 Hexo 强力驱动
主题 - NexT.Mist