2个递归经典的例子
先来一个入门的:
上初中学习数列求和什么的时候我们就学过高斯的计算1到100的自然数的和的经典课文,那么如果我们现在用程序的话该怎么来做呢?
自然是循环来做这件事。
如果不用循环怎么做呢?
def sum(first, end):
if end == 1:
return first
elif end > 1:
return sum(first + end, end-1)
print(sum(1,100))
结果是5050,根当时高斯算出来的结果是一样的。
当然了,这个sum函数还能算任意的1到任何的n的自然数之和。
斐波那契数列
第一项是1,第二项是1,第三项是前俩项的和,依次类推。
表达式:F0=1,F1=1,F2=2,F3=3, …..Fn = Fn-1+Fn-2
实际的样子:1,1,2,3,5,8,13,21…….
如果想得到第N项的值我们该如何做呢?
def fib(n):
if n == 1:
return 1
elif n == 2:
return 1
elif n > 2:
return fib(n-1)+fib(n-2)
这样的话我们就可以调用fib函数来算出第n项的值。
更有意思的就是汉诺塔了,
有3个杆子,有一个杆子上面套着从小到大的一排圆盘,要想把一个杆子上的所有圆盘都移动到另一个杆子上,条件是圆盘必须是大的在下面,小的在上面。要像将圆盘移动到另一个杆子上所用的最短的步数。
def move(n, A, B, C):
if(n == 1):
print(A, '->', C)
else:
move(n-1, A, C, B)
move(1, A, B, C)
move(n-1, B, A, C)
move(3, 'A', 'B', 'C')
结果如下
A->C
A->B
C->B
A->C
B->A
B->C
A->C
是不是很神奇。