求救:递归中屏幕输出和文件输出的问题。

cillin 2006-11-22 02:38:32
例:
#include <iostream>
#include <fstream>
using namespace std;

void f( int n, int x, int y, int z )
{
ofstream out( "test.txt" );
if( n == 1 )
{
cout << x << " to " << z << endl;
out << x << " to " << z << endl;
}
else
{
f( n-1, x, z, y );//把N-1个通过z先移到Y上
f( 1, x, y, z ); //把剩下的一个移到Z上
f( n-1, y, x, z);//把Y上的N-1个移到Z上
}
}

int main( )
{
f( 3, 1, 2, 3 );
}

上面是个汉诺塔的输出,输出到屏幕的时候,可以把每一步都打出来。可是输出到文件中的时候,最后打开文件为什么只有最后一步?

求解答。
...全文
197 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttpps 2006-11-22
  • 打赏
  • 举报
回复
汉诺塔问题曾经也想过想了1个礼拜都没把具体算法搞出来,嘿嘿.最后迫不得已才看书找到算法.
chai2010 2006-11-22
  • 打赏
  • 举报
回复
void f(ofstream& out, int n, int x, int y, int z );
cillin 2006-11-22
  • 打赏
  • 举报
回复
把OUT的定义移到main中,
那么在调用它时,在F函数中的形参中如何定义阿?
chai2010 2006-11-22
  • 打赏
  • 举报
回复
汉诺塔的问题本来就是复杂的,
移动的次数都是那么多(指数级的),

要是想详细了解的话可以参考《具体数学》
第一章
chai2010 2006-11-22
  • 打赏
  • 举报
回复
ofstream out( "test.txt" );移到main函数中!
cillin 2006-11-22
  • 打赏
  • 举报
回复
还有这个程序效率好低,用递归的话,有没有更优的算法?

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧