说起递归,我觉得其实大部分人应该是不陌生的,递归广泛存在于生活中。
比如:
The woman in this image holds an object that contains a smaller image of her holding an identical object, which in turn contains a smaller image of herself holding an identical object, and so forth.[from wikipedia]
那么递归的定义是什么呢?
在数学和计算机科学中,我们给出一个比较传统的定义是:
它们有两个特性。
1. 一个基本特例,也称作平凡(一般)情况,它是递归终止的情形
2. 一个已定义好的规则来使其它非基本的情形转化为基本情形
可能这个上面的定义比较枯燥,那么我们用一个经典的例子来说明一下。
Fibonacci sequence
Fib(0) = 0, 是一个基本情况
Fib(o) = 1, 是第二个基本情况
所以 Fibonacci sequence 总共有两个基本情形
对于其它情形,我们定义 Fib(n) = Fib(n-1) + Fib(n-2)
到这里,估计读者已经对递归有一个大概的印象了,那么在Python中我们怎么用递归来实现某些特定的功能呢?
我首先用一些简单的例子来进行说明。
例1.
假如你要求序列数列 1, 2, 3, 4, …, n 的和。比如对于n=4, 其和是10。那假如我们用递归来描述这种情况呢?
定义:
1. 基本情况:S(1) = 1
2. 其它情形: S(n) = S(n-1) + n
所以在上述求和中S(n)的定义又用到了自己本身的定义,这就构成了递归。
我们用Python来实现以下上面的思路。
def Sum(n):
if n==1:
#对应基本情形
return 1
return Sum(n-1) + n#对应递归情形
>>> Sum(4)
10
>>> Sum(10)
55
>>> Sum(100)
5050
代码如上,可以看到,问题如果用递归来解决的话,可以与现实很好的结合,因为现实中有很多问题也是递归定义的。
此外