| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 486 人关注过本帖
标题:汉诺塔问题,可以这样写?return ;?
只看楼主 加入收藏
跳跳鱼
Rank: 2
等 级:论坛游民
帖 子:74
专家分:60
注 册:2011-5-4
结帖率:93.75%
收藏
已结贴  问题点数:40 回复次数:4 
汉诺塔问题,可以这样写?return ;?
这是汉诺塔问题的源码,其中有些部分不太明白,谁能帮我解释一下?谢啦!
程序代码:
#include <iostream>
using namespace std;
void tower(int ,int ,int ,int );
int main()
{
    int panshu;
    cout<<"请输入您要移动的盘子数量:"<<endl;
    cin>>panshu;
    tower(panshu,1,3,2);
    return 0;
}
void tower(int disk,int start,int end,int temp)
{
    if(disk==1)
    {
        cout<<start<<"-->"<<end<<endl;
        return ;}                 //这个地方,为什么会返回  return ; ?可以这样写?
    tower(disk-1,start,temp,end);    //以下三句到底表示什么意思?模模糊糊有点明白
    cout<<start<<"-->"<<end<<endl;   //能通俗的解释一下吗      
    tower(disk-1,temp,end,start);     
}
搜索更多相关主题的帖子: return 源码 
2012-09-03 16:28
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:30 
return 后面没有任何东西的作用和循环进而的 break 差不多。只要看到这个语句,函数就立刻返回。有返回值的话,就返回那个值。void 的函数,就只能单独 return,后面不能加东西了。

void tower(int disk,int start,int end,int temp)
这个函数的意思就是说,将 disk 这么多个盘子,利用 temp 这个柱子,从 start 移到 end 柱子上。

如果 disk 是 1 的话,直接移过去就行,和 temp 没关系。
否则的话,相当于先把上面 disk-1 个盘子移到 temp 上,再把最底下的一个移到 end 上,最后再把之前的那 disk-1 个盘子从 temp 移到 end 上。
2012-09-03 22:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
很经典的递归应用。值得花些心思体会其中蕴含的递归原理。实际要用到的递归,都比这个复杂的多。
什么用递归求阶乘呀,求 fibonacci 数列的例子都是瞎扯的,实际上如果这么用很白痴。
2012-09-03 22:05
跳跳鱼
Rank: 2
等 级:论坛游民
帖 子:74
专家分:60
注 册:2011-5-4
收藏
得分:0 
回复 2楼 pangding
我想问一下,关于参数start,temp,end 的顺序变换的方法,如何这样变换才能表达我移动盘子的顺序
2012-09-05 16:29
senpujituan
Rank: 4
等 级:业余侠客
帖 子:91
专家分:203
注 册:2012-6-29
收藏
得分:10 
return2楼已经回答了
我来说说后面几句的理解吧:注:1,2.3分别代表start、end、temp
第一步:你想把1上的n个盘移到3上。最终的结果是不是,最大的那个在3上,而其余的n-1个盘是不是应该在2上。
        (你不用考虑那n-1个盘是怎么到2上的,最终结果应该是上面说的吧)
第二步:通过第一步后,1上是空的吧。所以就通过1把2上的n-1个盘移到3上。


这样说应该能明白吧
我自己想想是蛮好理解的,不知道表达的好不好!!
2012-09-05 18:34
快速回复:汉诺塔问题,可以这样写?return ;?
数据加载中...
 
   



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

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