汉诺塔.汉诺塔的计算方式步骤,求 N 个圆盘:
汉诺塔的计算步数为 2**N-1
count = 0
def hanoi(n: int, x: str, y: str, z: str):
'''
:param n: 圆盘数
:param x: 起点
:param y: 目标点
:param z: 中转点
count 值为 2 ** N -1
'''
if n == 0:
return
global count
count += 1
hanoi(n - 1, x, z, y)
print("{} --> {}".format(x, y))
hanoi(n - 1, z, y, x)
if __name__ == '__main__':
hanoi(5, "a", "b", "c")
print(count)
package main
import "fmt"
var count int
func main() {
hanoi(3,"a","b","c")
fmt.Println(count)
}
/*
n: 圆盘数
x: 起点
y: 目的地
z: 中转点
count = 2 ** N -1
*/
func hanoi(n int, a, b, c string) {
if n == 0 {
return
}
count++
hanoi(n-1, a, c, b)
fmt.Printf("%s --> %s\n", a, b)
hanoi(n-1, c, b, a)
}
package com.test;
public class Hanoi {
private static int count;
public static void main(String[] args) {
hanoi(4, 'a', 'b', 'c');
System.out.println(count);
}
/**
* @param n 圆盘数
* @param x 起点
* @param y 目的地
* @param z 中转点
* count = 2 ** N -1
*/
private static void hanoi(int n, char x, char y, char z) {
if (n == 0) {
// nothing to do
return;
}
count++;
// 通过 y 中转,将 x 移动到 z
hanoi(n - 1, x, z, y);
// 将1个圆盘由 x 移动到 y
System.out.printf("%c --> %c \n", x, y);
// 通过 x 中转,将 z 移动到 y
hanoi(n - 1, z, y, x);
}
}