尝试使用递归实现这样的事情:
if (m > n) return;
Foo 1 // no tabs
Foo 2 // \t
Foo 3 // \t\t
Foo 2 // \t
Foo 1 // no tabs
我有一个带有两个参数的函数:void indent(int m, int n);
(调用号码从 m 到 n)。
到目前为止我想出了这么多:
- 只要m <= n,就一直调用函数。 (基本案例)
- 打印第一行,不带制表符setw(0)
- 以 m+1 增量递归调用函数。 setw(4*m)
- (再次)打印没有任何制表符的第一行。 setw(0)
我走在正确的轨道上吗?我的伪代码至少是正确的吗?
还有,有没有办法用数字表示制表符?我想不出任何使用递归或迭代来使用 tab\t 的方法。
更新:我想通了:)。 cout << setw(4*m);
就在cout << "Foo";
之前做的伎俩。第一次调用 m=0 所以 setw(0),第二次调用 setw(4),然后是 setw(8) 等等。现在我只需将文本向后打印到 0 个标签。
最佳答案
看起来你走的路是对的。您只希望递归方法在 m == n 时检查,您只需打印该行一次而不是两次,然后展开。
关于c++ - 如何使用递归缩进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631347/