如何使用递归缩进行?

发布于 2024-11-19 07:44:54 字数 815 浏览 1 评论 0原文

尝试使用递归实现类似的目标:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

七堇年 2024-11-26 07:44:54

看来您走在正确的道路上。您只希望递归方法检查何时 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.

何以畏孤独 2024-11-26 07:44:54

这将完美地发挥作用。

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

This will work perfectly.

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;
} 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文