Open oakland opened 2 years ago
在查找相关相关资料的时候,还看到了这个网站replaceRecursionWithIteration,可以看看这个主页,感觉好像就是重构的作者自己写的页面,应该还可以吸取一些养分
关于递归转尾递归和遍历,应该也算一个主题,目前就研究到这里,感觉也够用了,搜了一些资料放在我的 oneTab 里了,后续想研究再拿出来看看。
尾递归的本质就是后面的项是由前面的项推演出来的,尾递归的初始参数是前面推演的 n 项和从推演开始的序号 n,比如 sicp 中 exercise 1.11 的例子就是 iter(2, 1, 0, 2),前三个参数是推演的起始值:2、1、0,最后一项 2 是计数器,counter 表示从满足条件的最后一项开始,也就是 2。然后第 3 项就是可以从前 3 项推演出来。
之前喜欢用递归的方式处理问题,后来看到一句话:
所以又去看了一下 SICP 中递归和尾递归的章节,重新领悟了一番,重新复习了一下递归转遍历
什么是尾递归
对于如何定义尾递归,其实在我的脑海里有个心里模型,但是我又很难精确地描述出来。但是看到知乎有个回答说的特别好,一针见血。
递归快排转遍历
大部分的递归转遍历用的都是 factorial 的例子,还有一部分用的是 fibnacci,这两个在 sicp 中都有非常好的论述。但是很少有人用其他的递归来做示例,这个问答里有一个回答用的就是快排这个递归转遍历,感觉让人眼前一亮啊。