每个人都应该懂点“递归”

Stefan 发布于 2015年11月28日 | 更新于 2015年11月29日
tinyfool 等1人欣赏。

pre: 题目继承自池老师的“每个人都应该懂点XXX系列”

读了一篇介绍“递归”概念的文章,原文在“iOS开发”公众号,作者是唐巧。文章写的很好。

文中提到“递归是非常反人类的思维方式”。没错,生活中人们很少会意识到递归这个概念。

但是,清楚认识递归的概念以后,我发现递归思想在生活中及其常见,就是“不断尝试,不断失败,反复练习,不断迭代。”

function getAbility(currentAbility) {

    var enhancedAbility = justDoIt(currentAbility);    //just do it, 不要犹豫!总会有收获!

    if (enhancedAbility === success) {    //success在你心中是怎样定义的呢?

        return enhancedAbility;    //经历了100次失败,终于成功了!!

    } else {

        getAbility(enhancedAbility)    //失败了不要怕!继续前行!
    }
}

我们get新技能的过程,就是反复迭代的过程,不断的经历失败和挫折,直到最后成功。

迭代中有一个很重要的概念,叫“退出条件”。生活中,“退出条件”就是我们对成功的定义。如果将成功定义为“十全十美,比别人强”,那么将在迭代中无法退出,直至最后把自己搞死。

共6条回复
adad184 回复于 2015年11月29日

这明明是循环吧?

tinyfool 回复于 2015年11月29日

他的代码是递归

不过迭代,循环、递归,我认为还是三个不同的概念

当然,很多时候迭代和递归是有关联的

StevenZhang 回复于 2015年11月29日

1楼 @adad184 最近刚看的,要区分递归procedure和递归process,前者是语法上的,是说过程间接或直接地refer自身;后者是evolve上的,需要先展开再计算。这导致的结果是,上面一个递归的procedure是一个迭代的process。

adad184 回复于 2015年11月29日

我的意思是 你代码中举的例子 用循环来描述更合适

Stefan 回复于 2015年11月29日

4楼 @adad184 仔细琢磨的一下,如果深究的话,的确“循环”的思想更合适一些。递归的中心思想是“调用自身解决问题”,循环的思想是“不断重复相同的过程”,二者的共同点是都必须有退出条件。

Stefan 回复于 2015年11月29日

2楼 @tinyfool 感觉循环和递归做的都是相同的事情,只是思维方式不同。感觉循环和递归都可以叫做“迭代”。没搞懂,先mark一下。

登录 或者 注册