汉诺塔——老夫不管什么分析不分析,直接粗暴
发布日期:2021-05-07 11:07:42 浏览次数:19 分类:精选文章

本文共 627 字,大约阅读时间需要 2 分钟。

在这里插入图片描述

直接上图开干: 1个盘子直接从A放到C(递归出口),大于1个不管你有多少盘子,我始终把你当成两个盘子,即第n个和第(n-1)个,那就是把(n-1)放到B,把n放到C,再把(n-1)放到C,递归思想大功告成;

直接上代码:

void Prinmove(int num,char a,char b){   	printf("%d盘:%c->%c\n",num,a,b);}void Move(int num,char A,char B,char C) //三根柱子 A,B,C{   	if (num == 1) //当n=1,直接从A->c	{   		Prinmove(num,A, C);		return;	}	else		Move(num - 1, A,C,B);//将(n-1)放在B柱子上		Prinmove(num,A, C);//将第n个放在C上		Move(num - 1, B, A, C);//再将(n-1)个从B放到C}int main(){   	int num = 0;	printf("请输盘数\n");	scanf("%d", &num);	Move(num,'A','B','C');	system("pause");	return 0;}

递归不要太纠结每一个函数运行的过程,太复杂容易乱,要从递归本质出发,将其分解成与原问题相似的小问题来解决,比如汉诺塔,始终是n和(n-1)的事儿,将出口找好,整体分解一次,依次递归;

上一篇:扫雷小游戏——简单易懂
下一篇:const的作用

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月30日 19时08分37秒