如何使用递归缩进行

How to indent lines using recursion?

本文关键字:缩进 递归 何使用      更新时间:2023-10-16

尝试使用递归实现类似的功能:

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

我有一个函数,它有两个参数:void indent(int m, int n);(m到n的主叫号码)。

到目前为止,我明白了这些:

  • 只要m <= n,就一直调用函数。(基准)
  • 打印不带制表符的第一行setw(0)
  • 以m+1增量递归调用函数。环境运输及工务局局长(4 *米)
  • 打印不带制表符的第一行(再次)。环境运输及工务局局长(0)

我讲对了吗?我的伪代码至少是正确的吗?

还有,有没有办法用数字表示制表符?我想不出用递归或迭代来使用tab t的任何方法。

: 我想通了:)。cout << setw(4*m);cout << "Foo";之前。第一次调用m=0时,调用setw(0),第二次调用setw(4),然后调用setw(8),以此类推。现在我只需要将文本向后打印到0个制表符

看来你是在正确的道路上。如果只希望递归方法检查m == n,则只打印一行,而不是两次,然后展开。

这会很好地工作。

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;
}