一、递归
递归的两个特点:调用自身;结束条件。
def func1(x):
print(x)
func1(x-1)
没有结束条件,si递归。不是递归。
def func2(x):
if x > 0:
print(x)
func2(x+1)
递归调用的x+1
,没有结束条件。不是递归
def func3(x):
if x > 0:
print(x)
func3(x-1)
是递归。打印123
如下图:先打印,后递归。从上往下123
def func4(x):
if x > 0:
func4(x-1)
print(x)
和func3
一样,只是打印位置不同。是递归。打印321
如下图:先递归,后打印。从上往下321
递归实例:汉诺塔问题
问题:
思路:
第一步和第三步是原问题的一个子问题
# a,b,c表示三个盘子,这里原函数表示:起点为a,经过b,移动到c
def hanoi(n, a, b, c):
if n > 0:
hanoi(n-1, a, c, b)
print("moving from %s to %s" % (a, c))
hanoi(n-1, b, a, c)
# test
hanoi(3, 'A', 'B', 'C')
汉诺塔移动次数递推式:h(x) = 2h(x-1) + 1