将汉诺塔中的3跟柱子改为4根,求盘子数为1到12时将全部盘子从第一根移动到最后一根需要移动的次数。
考虑正常的汉诺塔规则,若有 n
个圆盘,那么就要将前 n−1
个圆盘移动到 2 号柱,再把最大的圆盘移动到 3 号柱,最后将前 n−1
个圆盘移动到 3 号柱。那么将 n−1
个圆盘移动又要涉及到 n−2
个圆盘,以此类推,所以,3个柱子得到的方程是 $f[i]=f[i-1] \times 2 + 1$
Code
1void hanoi(int n, char A, char B, char C){
2 if(n == 1) printf("%c -> %c\n", A, C);
3 else{
4 hanoi(n-1, A, C, B); // 把 A 上面的 n-1 块借助 C 移动到 B
5 printf("%c -> %c\n", A, C); // 第 n 块从 A 移动到 C
6 hanoi(n-1, B, A, C); // 把 B 上面的 n-1 块借助 A 移动到 C
7 }
8}
除另有声明外,本博客文章均采用 知识共享 (Creative Commons) 署名 4.0 国际许可协议 进行许可。转载请注明原作者与文章出处。