【牛刀小试1】汉诺塔

【牛刀小试1】汉诺塔

 

主要知识:

1.        递归

2.        函数

3.        If-else

4.        静态变量

 

  //汉诺塔

   汉诺塔是一种游戏,有三个塔分别标为A、B、C。A塔上套有n个盘子,

分别从下往上由大到小排列着,游戏的目的是要把A塔的盘子移到C塔上,

每次移动之后,都不允许出现大盘子在小盘子上面的情况。

 

分析:

    我们要把A塔的盘子移到C塔,则必须借助B塔(当n= 1时除外),再移

到C塔。

    当n= 1时,A->C

         当n= 2时,A->B,A->C,B->C

         当n= 3时,A->C,A->B,C->B,A->C,B->A,B->C,A->C

         当n=....

解答:采用递归函数(自调用)

 

 

#include <stdio.h>
 
//tower函数的定义。使用递归(自调用)
//参数分别为:层数,塔A,塔B,塔C
void tower( int num, char a, char b, char c)
{
         staticint count= 0; //静态局部变量,生存周期为整个程序
          
         if(num== 1 )
         {
                   count++;  //count= count+ 1;
                  
                   printf("第%3d步: %c->%c\n",count, a, c ); //%3d为字宽为3
         }
         else
         {
                   count++;
                   tower(num- 1, a, c, b ); //自己调用自己
        
             printf( "第%3d步:%c->%c\n",count, a, c );
        
             tower( num- 1, b, a, c );
         }
        
         return;
}
 
 
int main( void )
{
         intn;  //n为A塔的层数
        
         printf("输入A的层数: " );
         scanf("%d", &n );
        
         //函数tower的调用 
         tower(n, 'A', 'B', 'C' );
        
         return0;
}
 

运行结果:

 

 

【指尖的微笑】错误在所难免,希望得到大家的指正^-^

转载时保留原文的链接http://oursharingclub.joinbbs.nethttp://blog.csdn.net/mirrorsbeyourself

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值