用递归方法解决hanoi塔问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/hnujunjie/article/details/90291847

之前在浏览博客时有次看到了hanoi塔问题,在书上也看到过,在这里和大家分享一下我的想法
1.废话不多说,首先把java代码展示出来
static void hanoi(char A,char B,char C,int n){
if(n==1)
{
System.out.println(A+"——>"+C);
}
else
{
hanoi(A,C,B,n-1);
System.out.println(A+"——>"+C);
hanoi(B,A,C,n-1);
}
}
public static void main(String args[]){
hanoi(‘A’,‘B’,‘C’,3);
}
}
/*

  • 递归的思想,想办法把递归表达式用数学语言描述出来
  • 然后用编程语言表示数学语言
  • 就比如在汉诺塔问题中,
  • 可以把问题分解成两个步骤,第一个步骤是把A柱子上的最底层的盘子上面的所有n-1个盘子借助一 个柱子C移到另一个柱子B
  • 第二步是把B柱子上的n-1个盘子借助A柱子移到C柱子上
  • 然后用编程语言直接描述出来
  • 然后一切OK!
  • 好久以前在郑州博物馆遇到过孔明锁和汉诺塔,当时不知道怎么玩这个汉诺塔,还是我女朋友教我的,哈哈。。。。。
  • 说实话这个问题困扰我好久,当初怎么也不明白这个递归到底是怎么来的(对于其它问题的递归倒是可以理解)后来终于想明白了
    */
    2.下面展示C语言版本的代码
    #include<stdio.h>
    void hanoi(char A,char B,char C,int n)
    {
    if(n==1)
    {
    printf("%c——>%c\n",A,C);
    }
    else
    {
    hanoi(A,C,B,n-1);
    printf("%c——>%c\n",A,C);
    hanoi(B,A,C,n-1);
    }
    }
    int main()
    {
    int n;
    scanf("%d",&n); //这里可以选择汉诺塔的数量
    hanoi(‘A’,‘B’,‘C’,n);
    return 0;
    }

猜你喜欢

转载自blog.csdn.net/hnujunjie/article/details/90291847
今日推荐