用递归方法解决hanoi塔问题

之前在浏览博客时有次看到了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;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值