C语言递归代表——汉诺塔

C语言递归代表——汉诺塔

在
在A上有三个盘子,那么我要将它一个一个移到C上,并且最大放下边,最小在最上边,那么可以这么表示:A-》C,A-》B,C-》B,A-》C,B-》A,B-》C,A-》C;那么对于N个盘子,那么我们可以将它看成一个大盘子加N-1个剩下的盘子,将这N-1个盘子通过C移到B,最大的盘子再从A移到C,这N-1个盘子再通过A移到C,这就是递归,即N-1个盘子再看成N-2个盘子加一个大盘子,以此类推,就得到最终结果。以下是C语言代码:

#include<stdio.h>
void print(char pos1,char pos2){
    
    
	printf("%c->%c ",pos1,pos2);
}
void HanNuo(int p,char pos1,char pos2,char pos3){
    
    
	if (p==1){
    
    
		print(pos1,pos3);
	}
	else{
    
    
		HanNuo(p-1,pos1,pos3,pos2);
		print(pos1,pos3);
		HanNuo(p-1,pos2,pos1,pos3);
	}
}
int main(){
    
    
	char pos1 = 'A', pos2 = 'B', pos3 = 'C';
	HanNuo(3,pos1,pos2,pos3);//要到少个盘子自己定,我这里是3个,但是盘子越多结果越庞大。
	return 0;
}

例如三个盘子的运行结果为:A->C A->B C->B A->C B->A B->C A->C

猜你喜欢

转载自blog.csdn.net/qq_45841205/article/details/109552683