除了迭代式的快速排序,还有递归式的快速排序,在实现它之前,我们先来学习一个概念:递归。
这个概念非常重要,因此,关于它我们得多说两句。
递归(Recursion)
存在于多个领域
递归这一术语,应用面非常广泛,在语言学、逻辑学、数学和计算机科学中都有出现。
虽然在不同领域的具体定义不同,不过从直观上看,无论在哪个领域,递归就像一条贪吃蛇:所做得事情,是“自己吃自己”!
历史悠久
对一种自己吃自己的条状动物的描述,早在古埃及时期就有了,古埃及壁画中的含尾蛇(Ouroboros)就是这样一种形象。
含尾蛇由希腊学者引入欧洲,成为中世纪炼金术的符号。下图就是一副 15 世纪的炼金术小册子中的插图。
虽然炼金术含尾蛇的具体形象和上面那种可爱的胖胖相去甚远,但它们表达的含义都是一样的。
自食其尾的蛇揭示了递归的根本:递归是一个过程,在这个过程中有一个步骤援引了整个过程本身。
有效递归和无效递归
老和尚讲故事
先