递归问题解决汉诺塔(C)

来源:互联网 发布:网络攻防大赛平台 编辑:程序博客网 时间:2024/06/11 12:33

#include<stdio.h>void hanoii(char A,char B,char C,int n);void main(){int a;printf("please input the number of the hanoi:\n");scanf("%d", &a);hanoi('A','B','C',a);}void hanoii(char A,char B,char C,int n){    if(n == 1){printf("from %c to %c\n",A,C);}else{hanoi(A,C,B,n-1);printf("from %c to %c\n",A,C);hanoii(B,A,C,n-1);}    }
首先让我们来看一看 c语言的实现方法

 我们可以把所有情况都看做一种情况 即看作两层汉诺塔。


首先我们来定义一个汉诺塔函数来处理汉诺塔 ,内部的形参为char A, char B, char C 分别代表三个柱子 int n 代表层数。


一、当塔只有一层的时候 我们便可以直接把盘子 从A移动到目标盘C   对应代码  if(n == 1) printf("from %c to %c\n",A,C);


二、否则都可以看作是两层塔

    把函数名看作搬运工 
    则第一句表示  把第N-1座塔 <span style="white-space:pre"></span>A->B
      第二句表示  把第N座塔     A->C
      最后一句    把第N-1座塔 <span style="white-space:pre"></span>B->C





0 0
原创粉丝点击