递归汉诺塔

#include<cstdio>  
#include<string>  
#include<cmath>  
using namespace std;  
int ans=0;  
void hanoi(int n,int a,int b,int c){  
    if(n==0){  
        printf("%d:%d->%d\n",a,b,c);ans++;  
        return;  
    }  
    hanoi(n-1,b,c,a);  
    printf("%d:%d->%d\n",a,b,c);ans++;  
    hanoi(n-1,b,a,c);  
}  
int main(){  
    int n;  
    scanf("%d",&n);  
    hanoi(n,1,2,3);  
    printf("%d\n",ans);  
    return 0;  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
guide: 1、此程序为汉诺塔程序(此代码用到递归,包括直接递归和间接递归(间接递归是用在了重复使用本程序那块)); 2、此程序的代码流程是,由main函数进入之后,先后调用的函数是由上至下定义的; 3、亲爱的朋友,请尊重偶的版权,你也会得到相应的尊重哦! 4、若此程序或代码有不足或不对的地方,还望得到指正! 5、循环虽然比递归算法快,但比较而言,递归更容易让人理解! purpose: 1、培养独立思考算法的能力,特别是递归时,用到的是数学中的数列,找到整个递归的最先出栈的函数,以及数列的第n项与第n-1项的关系就能用递归解决问题; 2、通过试数来推算自己的程序逻辑是否有beg,并找出修复之; 3、熟练一下结构体和链表的基本推理,尤其是插入和删除元素时指针的走向! function: 1、简易输出汉诺塔步骤(由哪根柱子移到哪根柱子); 2、详细输出汉诺塔步骤(在功能1基础上逐步输出每次移动之后的盘子分布); 3、二维详细输出汉诺塔步骤(在前2功能基础上逐步输出二维盘子分布图); 4、动态二维输出汉诺塔步骤(在前3功能基础上演示动态输出并提示下一步); 5、可重复使用本程序! 在VC++6.0中的输出结果是: --------------------------- ………… 开始移动: 第1次移动过程: A(1号盘)→B 此时灰原の盘子分布图: A柱子 B柱子 C柱子 ↓ ↓ ↓ 1层为空层 第2层: 2* 1* 请按任意键继续. . . 第2次移动过程: A(2号盘)→C 此时灰原の盘子分布图: A柱子 B柱子 C柱子 ↓ ↓ ↓ 1层为空层 第2层: 1* 2* 请按任意键继续. . . 第3次移动过程: B(1号盘)→C 此时灰原の盘子分布图: A柱子 B柱子 C柱子 ↓ ↓ ↓ 第1层: 1* 第2层: 2* 请按任意键继续. . . 请问您是否要继续重玩游戏,需要重玩请按“Y”,否则按“N”结束程序! ………… ---------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值