之前在浏览博客时有次看到了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;
}