如何使用递归缩进行?
尝试使用递归实现类似的目标:
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 增量递归调用该函数。 setw(4*m)
- 打印第一行,不带任何制表符(再次)。 setw(0)
我走在正确的道路上吗?我的伪代码至少是正确的吗?
另外,有什么办法可以用数字表示制表符吗?我想不出任何使用递归或迭代来使用 tab \t 的方法。
更新:我想通了:)。 <代码>cout << setw(4*m); 就在 cout <<; 之前"Foo";
就可以了。第一次调用 m=0,因此 setw(0),第二次调用 setw(4),然后调用 setw(8),依此类推。现在我只需将文本向后打印到 0 个选项卡即可。
Trying to achieve something like this using recursion:
if (m > n) return;
Foo 1 // no tabs
Foo 2 // \t
Foo 3 // \t\t
Foo 2 // \t
Foo 1 // no tabs
I have a function that takes 2 parameters: void indent(int m, int n);
(calling number from m to n).
So far I figured this much out:
- As long as m <= n, keep calling the function. (base case)
- Print the first line without any tabs setw(0)
- Call the function recursively with m+1 increment. setw(4*m)
- Print the first line without any tabs (again). setw(0)
Am I on the right track? Is my pseudocode correct at least?
Also, is there any way to express tabs numerically? I can't think of any way to use tab \t using either recursion or iteration.
Update: I figured it out :). cout << setw(4*m);
right before cout << "Foo";
does the trick. On first call m=0 so setw(0), on 2nd call setw(4), then setw(8) and so on. Now I just have to print the text backward to 0 tabs.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看来您走在正确的道路上。您只希望递归方法检查何时 m == n,您只需打印该行一次而不是两次,然后展开。
Looks like you are on the right path. You would just want your recursive method to check when m == n, you would only print the line once rather then twice and then unroll.
这将完美地发挥作用。
This will work perfectly.