| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 15487 人关注过本帖
标题:关于汉诺塔的递归算法,到底是怎么执行的?想的头痛
只看楼主 加入收藏
whukeming
Rank: 2
等 级:论坛游民
帖 子:76
专家分:51
注 册:2008-8-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:20 
关于汉诺塔的递归算法,到底是怎么执行的?想的头痛
关于汉诺塔的递归算法,到底是怎么执行的?想的头痛

当n等于2时可以理解,当n等于3是就理解不了了。现在就是想知道当n等于3时,程序到底是怎么执行的?为什么第一个输出的是a->c;

程序代码:
# include "stdio.h"

void move(int n, char a, char b, char c)

{
    if (n == 1)
        printf("\t%c->%c\n", a, c);
    
    else
    {
        
        move(n-1, a, c, b);
        
        printf("\t%c->%c\n", a, c);
        
        move(n-1, b, a, c);
        
    }
    
}
int main(void)

{
    int n;
    printf("请输入要移动的块数:");
    scanf("%d", &n);
    
    move(n, 'a', 'b', 'c');
    
    return 0;
}
/*执行结果:
a->c
a->b
c->b
a->c
b->a
b->c
a->c*/


[ 本帖最后由 whukeming 于 2013-3-30 17:08 编辑 ]
搜索更多相关主题的帖子: color 
2013-03-30 16:53
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:2 
要学会调试,一步步跟进
3, a, b, c
    2, a, c, b
        1, a, b, c
        printf()    // a -> c
    printf()        // a -> b
        1, c, a, b
        printf()    // c -> b
printf()            // a -> c
    2, b, a, c
        1, b, c, a
        printf()    // b -> a
    printf()        // b -> c
        1, a, b, c
        printf()    // a -> c


[fly]存在即是合理[/fly]
2013-03-30 17:08
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:2 
如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘 子,就将B当作辅助柱。
如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,
每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,
而被遮住的部份,其实就是进入程式的递回处理。

三十年河东,三十年河西,莫欺少年穷!
2013-03-30 17:09
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:2 
你不知道这个世界上有个东西叫做debug吗?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-30 17:16
whukeming
Rank: 2
等 级:论坛游民
帖 子:76
专家分:51
注 册:2008-8-24
收藏
得分:0 
回复 2楼 azzbcc
还没了解过栈,所以还不知道怎么调试呢。

为什么n=1的时候又是 a b c 了,这步不懂

[ 本帖最后由 whukeming 于 2013-3-30 17:55 编辑 ]
2013-03-30 17:53
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
以下是引用whukeming在2013-3-30 17:53:11的发言:

还没了解过栈,所以还不知道怎么调试呢。

什么栈,我是说Debug,一步一步跟进语句执行,一般编译器应该有这功能的


[fly]存在即是合理[/fly]
2013-03-30 17:55
whukeming
Rank: 2
等 级:论坛游民
帖 子:76
专家分:51
注 册:2008-8-24
收藏
得分:0 
回复 6楼 azzbcc
我用的是mac的Xcode,不了解,具体怎么操作
2013-03-30 17:56
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
好高端的样子,我也不了解,建议 百度一下


[fly]存在即是合理[/fly]
2013-03-30 18:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
没有或不会用debugger,可以自己写调试代码追踪数据和指令动向,这些也是很基本要学的东西。

授人以渔,不授人以鱼。
2013-03-30 18:07
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:2 
首先你要理解递归~,就是你理解递归了吗?那么理解递归。

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2013-03-30 19:19
快速回复:关于汉诺塔的递归算法,到底是怎么执行的?想的头痛
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044978 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved