鱼C论坛

 找回密码
 立即注册
查看: 2887|回复: 4

递归和汉诺塔问题~!!!!!

[复制链接]
发表于 2014-1-23 09:43:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 fanxiaobao 于 2014-1-26 09:21 编辑

昨天下午看了甲鱼兄递归解决汉诺塔问题的视频后,至今大脑还在一个死循环跳不出来怎么办?求大神帮忙啊,好痛苦,夜不能寐啊...............


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-23 11:21:49 | 显示全部楼层
贴出代码,不然谁知道你的问题是什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-23 11:38:08 | 显示全部楼层
这个本质上说不是C语言本身的问题,而在于原先你是否能看懂数学定义,很多数学上的定义,如费泼拉契数列都不直接描述如何得到该数列的,而是通过递归的方式定义问题。而C语言的递归仅仅是提供了一种类似的方式而已。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-23 23:40:14 | 显示全部楼层
贴代码           
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-26 09:21:34 | 显示全部楼层

经过这两天的无限循环终于找到出口了,并且做了一个数组版的过程演示和简单的步骤提示,需要的新手可以看一下,老鸟可以飘过.....
网盘:http://pan.baidu.com/s/1sjHE4Cd
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-26 10:22:41 | 显示全部楼层
用堆栈吧
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <limits>
  4. using namespace std;

  5. #define STYPE int

  6. #define        EMPTY    -2
  7. #define        FULL     -1
  8. #define        PUSH_OK   1
  9. #define        CAPACITY  32767

  10. class Stack {
  11.     int top;
  12.     STYPE element [CAPACITY];
  13. public:
  14.     Stack ();
  15.     ~Stack ();
  16.     int num (void);
  17.     int push (STYPE new_elem);
  18.     STYPE pop (void);
  19.     STYPE snoop (void);
  20. };

  21. Stack::Stack (void)
  22. {
  23.     top = -1;
  24.     for (int i=0; i<CAPACITY; i++)
  25.         element[i] = 0;
  26. }

  27. Stack::~Stack (void)
  28. {
  29.     // nothing
  30. }

  31. int Stack::num (void)
  32. {
  33.     return (top + 1);
  34. }

  35. STYPE Stack::pop (void)
  36. {
  37.     STYPE x;
  38.     if (top >= 0) {
  39.         x = element[top];
  40.         element[top] = 0;
  41.         top--;
  42.         return x;
  43.   } else
  44.       return EMPTY;
  45. }

  46. STYPE Stack::snoop (void)
  47. {
  48.     if (top >= 0)
  49.         return element[top];
  50.     else
  51.         return EMPTY;
  52. }

  53. int Stack::push (STYPE new_elem)
  54. {
  55.     if (top < CAPACITY - 1) {
  56.         top++;
  57.         element[top] = new_elem;
  58.         return PUSH_OK;
  59.     } else
  60.         return FULL;
  61. }

  62. int main (int argc, char **argv)
  63. {
  64.     STYPE N, _N, _P, _T, _F, _R;

  65.     if (argc != 2) {
  66.         cerr << "usage: " << argv[0] << " N\n";
  67.         exit(1);
  68.     }

  69.     N = (STYPE)strtol(argv[1], (char **)NULL, 10);

  70.     /* a bit of error checking, LONG_XXX should be there in limits.h */
  71.     if (N == LONG_MIN || N == LONG_MAX || N <= 0) {
  72.         cerr << "illegal value for number of disks\n";
  73.         exit(2);
  74.     }

  75.     Stack s;
  76.     s.push(N);
  77.     s.push(1);
  78.     s.push(3);
  79.     s.push(0);

  80.     while (s.num() != 0) {
  81.         _P = s.pop();
  82.         _T = s.pop();
  83.         _F = s.pop();
  84.         _N = s.pop();
  85.         _R = 6 - _F - _T;
  86.         if (_P == 0) {
  87.             if (_N == 1)
  88.             cout << "move " << _F << " --> " << _T << "\n";
  89.             else {
  90.                 s.push(_N);
  91.                 s.push(_F);
  92.                 s.push(_T);
  93.                 s.push(1);
  94.                 s.push(_N-1);
  95.                 s.push(_F);
  96.                 s.push(_R);
  97.                 s.push(0);
  98.             }
  99.         } else {
  100.             cout << "move " << _F << " --> " << _T << "\n";
  101.             s.push(_N-1);
  102.             s.push(_R);
  103.             s.push(_T);
  104.             s.push(0);
  105.         }
  106.     }
  107. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-26 11:11:22 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-17 14:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表