Как сделать отступ с помощью рекурсии? - PullRequest
2 голосов
/ 09 июля 2011

Попытка добиться чего-то подобного с помощью рекурсии:

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, продолжайте вызывать функцию.(базовый случай) </strong>
  • Вывести первую строку без вкладок 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 вкладок.

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Это будет отлично работать.

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;
} 
1 голос
/ 09 июля 2011

Похоже, вы на правильном пути. Вы бы просто хотели, чтобы ваш рекурсивный метод проверял, когда m == n, вы печатаете строку только один раз, а не дважды, а затем развертываете.

...