汉诺塔加强版
Description
汉诺塔问题中限制不能将一层塔直接从最左侧移动到最右侧,也不能直接从最右侧移动到最左侧,而是必须经过中间。求当有N层塔的时候移动步数。
Input
输入第一行为用例个数, 每个测试用例输入的第一行为N。
Output
移动步数。
Sample Input 1
1
2
Sample Output 1
8
python3
# 求加强版汉诺塔,不能直接从左边移动到右边,也不能直接从右边移动到左边,求从左边移动到右边的总移动次数
# 此题用递归是最简单的,可以发现规律,hanoi(N)= 3* hanoi(N-1) +2
from enum import Enum
def hanoi(num): # 递归方法
if num == 1:
return 2
else:
return 3 * hanoi(num - 1) + 2
# 非递归方法:用栈代替递归
# 加强版汉诺塔有2大原则:1)小压大:即小的必须在大的上面;2)相邻不可逆:L->M和M->