简介
递归是最常见的非常基础算法。
递归特点
(1) 调用自身
(2) 结束条件
def func(x):
if x > 0:
print(x)
func(x-2)
汉诺塔问题
该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
(1) 把n-1个盘子从A经过C移动到B
(2) 把第n个盘子从A移动到C
(3) 把n-1个盘子从B经过A移动到C
def hanoi(n, a, b, c):
if n > 0:
# step 1 n-1 from a via c to b
hanoi(n-1, a, c, b)
# step 2 no.n from a to c
print("move from %s to %s".format(a, c))
# step3 n-1 from b via to c
hanoi(n-1, b, a, c)
汉诺塔移动次数的计算公式: h(x) = 2h(x-1) + 1
斐波那契数列问题
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
def Febo(number):
if number == 0:
return 0
elif number == 1:
return 1
else:
return Febo(number-2) + Febo(number-1)