汉诺塔

一.问题描述

一块板上有三根针 A、B、C。A 针上套有n个大小不等的圆盘,按照大的在下、小的在上的顺序排列,要把这 n 个圆盘从 A针移动到 C 针上,每次只能移动一个圆盘,移动过程可以借助 B 针。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。从键盘输入需移动的圆盘个数n,给出移动的过程。

二.代码展示

#include <stdio.h>
//先声明要定义的函数
void hanoi(int n, char from, char by, char to);
void move(char from, char to);

int main(){
	int m;
	scanf_s("%d", &m);
	hanoi(m, 'A', 'B','C');
	return 0;
}

//递归法,分三步
void hanoi(int n, char from, char by, char to){
	if (n < 1) return;
	//注意from,by,to的顺序变化
	hanoi(n - 1, from, to, by);//第一步:将n-1个盘子移到中间的针上(递归)
	move(from, to);			   //第二步:将在下面的盘子移到右边的针上
	hanoi(n - 1, by, from, to);//第三步:将剩余n-1个盘子从中间的针移到最右边的针上(递归)
}

//移动方式
void move(char from,char to){
	printf("%c->%c\n", from, to);
}

三.感受

这是老师写的代码,除去注释只有18行。递归的方式真的很值得学习,每次栞都会有新的感受!

上一篇:算法-分治


下一篇:Python实验6:模拟汉诺塔问题