汉诺塔python3函数编写和过程分析 !/usr/bin/env python3 -- coding: utf-8 -- 利用递归函数计算阶乘 N! = 1 * 2 * 3 * ... * N 利用递归函数移动汉若塔: 汉诺塔递归,每次递归的思想都是将n-1个放置到另一个空位上去 进行到n-1个开始后,a/b/c顺序会改变,但此时,仍要按照公式里的来排序,简单点来说就是将abc顺序调换 执行move(3, 'A', 'B', 'C')时,第一步是判断,n是否等于1 不等于1,执行else 得到结果 move(2, a, c, b) move(1, a, b, c) move(2, b, a, c) ============= 此时递归已经形成: 先执行第一个move(2, a, c, b) 这里就是我最开始的误区: [下面的是错误的展示] move(2-1, a, c, b) move(1, a, b, c) move(2-1, b, a, c) 这里犯了一个很低级的错误 在定义的函数里,a/b
-- coding: utf-8 --
利用递归函数计算阶乘
N! = 1 * 2 * 3 * ... * N
def fact(n):
if n == 1:
return 1
return n * fact(n-1)
print('fact(1) =', fact(1))
print('fact(5) =', fact(5))
print('fact(10) =', fact(10))
利用递归函数移动汉若塔:
def move(n, a, b, c):
if n == 1:
print('move', a, '-->', c) # 只有一个时,从 A 搬到 C
else:
move(n-1, a, c, b) # 否则,先将前 n-1 个搬到 B
move(1, a, b, c) # 将剩下的一个从 A 搬到 C
move(n-1, b, a, c) # 将 B 上的 n-1 个搬到 C
汉诺塔递归,每次递归的思想都是将n-1个放置到另一个空位上去
进行到n-1个开始后,a/b/c顺序会改变,但此时,仍要按照公式里的来排序,简单点来说就是将abc顺序调换
move(3, 'A', 'B', 'C')
print('============')
move(4, 'A', 'B', 'C')