前一讲我们谈到了递归的应用(大话递归(二)----如何编写与应用递归函数),从中我们知道,利 用递归解决问题的分析方法主要分为两个步骤:
第一步是分析出递归算法的核心递归逻辑,即分析出第n步与第n-1步间的递归逻辑关系。
第二步则是要找出递归的最终结束条件,否则递归会变成死循环,造成内存的泄漏。
首先,先来看一个递归的应用实例。
1
用递归求阶乘
举个例子。例如,我们要用递归思想实现编写用于计算n! (n 的阶乘)的函数factorial(n). 接下来,我们来利用以上两个步骤分析一下。 第一步:分析该问题递归算法的核心递归逻辑。我们发现 而 所以,有 所以,我们可以分析出,其第n步与第n-1步间的递归逻辑关系为: 用代码实现为def factorial(n): return factorial(n-1) * n
第二步:找出递归的最终结束条件。
相较于第一步,第二步就简单多了。本问题的终止条件即为n递归至1或0为止(数学中规定0!=1)。所以结束条件为 用代码实现为if n == 1 or n==0: return 1
最终全部代码为
def factorial(n): if n == 1 or n==0: return 1 return factorial(n-1) * n
2
用递归绘制分形图形
接下来,介绍一下递归的一个应用,用递归绘制一个分形图形。首先先来介绍一下分形图形。
分形图形是一种整体与局部自相似的几何图形,它具有以下几个明显的几何特征。
(1). 整体类似局部,即自相似
(2). 任意小尺寸下依然有精细的结构,
<