汉诺塔问题

/* 
* Copyright (c) 2015, 烟台大学计算机与控制工程学院 
* All rights reserved. 
* 文件名称:cpp1.cpp 
* 作者:巩凯强 
* 完成日期:2015年9月10日 
* 版本号:v6.0 
* 
* 问题描述:经典汉诺塔,A.B.C三个柱子,借助于B,将A上边的盘子,依次加到C柱子上。
* 输入描述:n为盘子数,即为将m个盘子在A,B,C三个柱子上变换。
* 程序输出:变换的过程

*/ 

#include <stdio.h>   
void move(int, char, char,char);  
int main()  
{
	int discCount;
	scanf("%d",&discCount);
    move(discCount,'A','B','C');  
    return 0;  
}  
void move(int n, char A, char B,char C)  
{  
    if(n==1)  
        printf("%c-->%c\n", A, C); //递归的终止条件 
    else  
    {  
        move(n-1,A,C,B);  
        printf("%c-->%c\n", A, C);  
       move(n-1,B,A,C);  
   }  
}  


运行结果:

以3个盘子为例。

汉诺塔问题_第1张图片

知识点总结:

以三个盘子为例,运用递归算法,首先将A柱上的第一个盘子移到C盘上,第二个盘子移到B柱上,再把C柱上的盘子移到B柱上,再把A柱上的第三个盘子移到C住上,此时B柱上有两个盘子,先把第一个盘子移到A柱上,再把第二个盘子移到C柱上,最后把A柱上的盘子移到C盘上。在这主要是灵活运用递归算法。

学习心得:

通过这个题目,巩固了递归算法的运用,

你可能感兴趣的:(函数,计算机,C语言)