为什么?(C++)

来源:百度知道 编辑:UC知道 时间:2024/05/24 14:38:12
当N从9起就不对了(第一步竟然是From C to B),为什么???
#include "stdafx.h"
#include <iostream.h>
const int N=3;
void move(char form, char to)
{
cout << " From " << form << " to " << to <<endl;
}
void hanoi(int n, char p1, char p2, char p3)
{
if(n==1)
move(p1, p3);
else
{
hanoi(n-1, p1, p3, p2);
move(p1, p3);
hanoi(n-1, p2, p1, p3);
}
}
int main()
{
hanoi(N, 'A', 'B', 'C');
return 0;
}
汉诺塔,从左到右三个盘是A, B, C

"回答者:bearoo8 - 魔法师 四级" 回答的不对,是N=9!!!!!!!!!!!! 把3改成9!!

"回答者:蛮蛮工作室 - 魔法师 五级" 怎么不是必须的呢?这个函数是用来显示每一步是如何完成的!

唉...可能是数据溢出了.....

不可能是A to C
我运行是A to C
因为递归到最后一定是先
(n==1)
move(p1, p3)即A to C

看了半天觉得你hanoi(n-1, p1, p3, p2);
move(p1, p3);
hanoi(n-1, p2, p1, p3); 中间那个是必须的吗?