递归函数可以写入C++中的文件吗?

neu*_*cer 1 c++ recursion file

我将有两个类功能.第一个类函数打开文件.然后它调用第二个函数,该函数写入文件并递归调用自身.当第二个函数完成时,原始函数将关闭文件.

是否有可能做到这一点?

R S*_*hko 8

当然,只要将文件句柄/对象传递给递归函数:

void recursion(int data, int maxdepth, ostream &os)
{
    // must eventually break out
    if (maxdepth == 0)
        return;

    // write data
    os << data << std::endl;

    // and call one deeper
    recursion(data + 1, maxdepth - 1, os);
}

void start(const char *filename)
{
    std::ofstream os(filename);

    recursion(0, 100, os);
}
Run Code Online (Sandbox Code Playgroud)

  • @ChrisLutz - 我喜欢这个想法,因为这可以让调用者确定递归的程度.我实际上将数据与maxdepth分开以显示它们如何独立(因为虽然这个玩具示例数据是一个计数器,但在一个真实的例子中,它可能是其他东西). (3认同)
  • 我更喜欢倒退.这样,调用者看到`recursion(100,os)`并且知道它会递归100级深度.这比查看`recursion(0,os)`并且必须知道它会递归100 - 0 = 100级深度更有用.但那只是我. (2认同)

sep*_*p2k 5

是的,这是完全可能的.


Ver*_*gen 5

是的,只要你的递归函数有一个基本情况,它就会终止.

func2(int p) {
  if (p == 0) return;
  //write
  func2(--p);
}

func() {
  //open file
  func2(10);
  //close file
}
Run Code Online (Sandbox Code Playgroud)

  • 你在`func2(p - )`中使用post减量,所以你将调用下一个func2与func2被调用相同的值,所以你的递归永远不会终止.你需要做`func2( - p)`或`func2(p - 1)`. (4认同)