【递归】C语言经典题目“汉诺塔”

mac2024-08-07  58

对于汉诺塔题目,最好用的是运用递归方法实现汉诺塔的移动。 总结:汉诺塔的规律 佛盘数 移动次数 1 1 2 3 3 7 4 15 … … n 2^n -1 给出代码: #include<stdio.h> int count=0; //定义一个全局变量count计数 ,方便后面打印移动的次数 void Move(char a,char b) //移动函数 记录移动的路径 {

printf("%c->%c\n",a,b); count ++;

} void Hanio(int n,char a,char b ,char c) //定义n为总共的佛盘数,a,b,c分别为每个柱子的名称 { if(n == 1) //当n==1,只要移动到C就行了 { Move(a,c); } else { Hanio(n-1,a,c,b); //此时运用递归,当有n个时候,只要把n-1的的佛盘从a移动到c在移动到b Move(a,c); //把最大的佛盘从a移动到c Hanio(n-1,b,a,c); //此时在把n-1个佛盘从b->a->c } } int main() { Hanio(64,‘a’,‘b’,‘c’); printf("%d\n",count); }

最新回复(0)