如何使用递归缩进行?

时间:2011-07-08 22:49:38

标签: c++ recursion indentation

尝试使用递归来实现这样的事情:

if (m > n) return;
Foo 1          // no tabs
   Foo 2       // \t
      Foo 3    // \t\t
   Foo 2       // \t
Foo 1          // no tabs

我有一个带2个参数的函数:void indent(int m, int n); (呼叫号码从m到n)。

到目前为止,我想出了这么多:

  • 只要m <= n,继续调用该函数。 (基本情况)
  • 打印第一行,没有任何标签 setw(0)
  • 以m + 1增量递归调用函数。的运输及工务局局长(4 * M)
  • 打印第一行,没有任何标签(再次)。的运输及工务局局长(0)

我是否在正确的轨道上?我的伪代码至少是正确的吗?

另外,有没有办法用数字表示标签?我想不出任何使用tab \ t使用递归或迭代的方法。

更新我想出来了:)。在cout << setw(4*m);之前cout << "Foo";执行此操作。在第一次呼叫m = 0所以setw(0),在第二次呼叫setw(4),然后setw(8),依此类推。现在我只需要将文本向后打印到0个标签。

2 个答案:

答案 0 :(得分:1)

看起来你走的是正确的道路。你只想要你的递归方法检查m == n,你只会打印一次而不是两次然后展开。

答案 1 :(得分:1)

这将完美无缺。

void indent( int m, int n )
{
  PrintTabs( m ); // Forward Printing

  if ( m < n )
  {
    indent( m + 1, n );
    PrintTabs( m ); // Backward Printing
  }
}

int main()
{
  indent( 0, MAX );
  return 0;
}