美文网首页
浅谈递归

浅谈递归

作者: Dont_Back | 来源:发表于2018-07-19 16:43 被阅读0次

    大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归。毋庸置疑地,递归确实是一个奇妙的思维方式。


    什么是递归呢?

    递归的定义:程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。(来源于百度百科)

    递归的图解(老和尚给小和尚讲故事)

    从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,老和尚说:从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,老和尚说:从前有座山…… 

    递归的数学模型其实就是我们所熟知的数学归纳法,数学归纳法适用于将解决的原问题转化为解决它的子问题,而它的子问题又变成子问题的子问题,而且我们发现这些问题其实都是一个模型,也就是说存在相同的逻辑归纳处理项。当然有一个是例外的,也就是归纳结束的那一个处理方法不适用于我们的归纳处理项,当然也不能适用,否则我们就无穷归纳了。总的来说,归纳法主要包含以下三个关键要素:

    步进表达式:问题蜕变成子问题的表达式 

    结束条件:什么时候可以不再使用步进表达式 

    直接求解表达式:在结束条件下能够直接计算返回值的表达式 

    递归的三要素:

    1、明确递归终止条件;

    2、给出递归终止时的处理办法;

    3、提取重复的逻辑,缩小问题规模。


    1). 明确递归终止条件

       我们知道,递归就是有去有回,既然这样,那么必然应该有一个明确的临界点,程序一旦到达了这个临界点,就不用继续往下递去而是开始实实在在的归来。换句话说,该临界点就是一种简单情境,可以防止无限递归。

    2). 给出递归终止时的处理办法

       我们刚刚说到,在递归的临界点存在一种简单情境,在这种简单情境下,我们应该直接给出问题的解决方案。一般地,在这种情境下,问题的解决方案是直观的、容易的。

    3). 提取重复的逻辑,缩小问题规模*

       我们在阐述递归思想内涵时谈到,递归问题必须可以分解为若干个规模较小、与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。从程序实现的角度而言,我们需要抽象出一个干净利落的重复的逻辑,以便使用相同的方式解决子问题。


    递归和循环的区别:

    从定义上看递归和无限死循环很像,但是其实他们俩并不一样。

    递归是静中有动,有去有回。

    循环是动静如一,有去无回。

    举个例子,给你一把钥匙,你站在门前面,问你用这把钥匙能打开几扇门。

    递归:你打开面前这扇门,看到屋里面还有一扇门(这门可能跟前面打开的门一样大小(静),也可能门小了些(动)),你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开,。。。, 若干次之后,你打开面前一扇门,发现只有一间屋子,没有门了。 你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这钥匙开了几扇门。

    循环:你打开面前这扇门,看到屋里面还有一扇门,(这门可能跟前面打开的门一样大小(静),也可能门小了些(动)),你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,(前面门如果一样,这门也是一样,第二扇门如果相比第一扇门变小了,这扇门也比第二扇门变小了(动静如一,要么没有变化,要么同样的变化)),你继续打开这扇门,。。。,一直这样走下去。 入口处的人始终等不到你回去告诉他答案。

    关于递归讲解的几个软文:

    https://www.zhihu.com/question/20507130/answer/15551917    什么是递归?

    https://blog.csdn.net/sinat_38052999/article/details/73303111    递归算法讲解

    https://blog.csdn.net/zcyzsy/article/details/77151709    递归和尾递归的区别和原理

    相关文章

      网友评论

          本文标题:浅谈递归

          本文链接:https://www.haomeiwen.com/subject/pvbtmftx.html