尝试使用递归来实现这样的事情:
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)。
到目前为止,我想出了这么多:
我是否在正确的轨道上?我的伪代码至少是正确的吗?
另外,有没有办法用数字表示标签?我想不出任何使用tab \ t使用递归或迭代的方法。
更新:我想出来了:)。在cout << setw(4*m);
之前cout << "Foo";
执行此操作。在第一次呼叫m = 0所以setw(0),在第二次呼叫setw(4),然后setw(8),依此类推。现在我只需要将文本向后打印到0个标签。
答案 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;
}