汉诺塔递归方法

来源:互联网 发布:摄像头照相软件 编辑:程序博客网 时间:2024/06/08 01:21
/*
hannuota(int n, char X, char Y, char Z)  X柱子是要移动的柱子,Y柱子是X移动要借助的柱子,Z柱子是要放在这个柱子上

在 hannuota函数中的递归判断方法
    如果是1个盘子
        直接将A柱子上的盘子从A移到C
    否则
        先将A柱子上的n-1个盘子借助C移到B
        直接将A柱子上的盘子移到C
        再将B柱子上的n-1个盘子借助A移到C
*/
实际算法:

#include <stdio.h>void hannuota(int n, char A, char B, char C){    if( 1 == n )            //如果是1个盘子        printf("将编号为%d的盘子直接从%c柱子移到%c柱子\n", n, A, C); // 直接将A柱子上的盘子从A移到C    else    {        hannuota(n-1 , A, C, B);       //先将A柱子上的n-1个盘子借助C移到B        printf("将编号为%d的盘子直接从%c柱子移到%c柱子\n", n, A, C);        hannuota(n-1 , B, A, C);       //再将B柱子上的n-1个盘子借助A移到C    }}int main(void){    char ch1 = 'A';    char ch2 = 'B';    char ch3 = 'C';    int n;    printf("请输入盘子的个数:");    scanf("%d",&n);    hannuota( n, ch1, ch2, ch3);    return 0;}

0 0
原创粉丝点击