2014-10-23 3 views
-3

Хорошо, я просто не могу понять эту проблему. Я должен распечатать любой треугольник размера в символах, вводящих две буквы. Ex: диапазон (c, j), и он должен быть рекурсивным. Я не могу иметь никаких циклов в моем коде. Вывод должен выглядеть следующим образом:Печать равностороннего треугольника A-Z с использованием рекурсии C++

  A 
     ABA 
     ABCBA 
     ABCDCBA 
    ABCDEDCBA 
    ABCDEFEDCBA 
    ABCDEFGFEDCBA 

И так далее ... Так что, если вы заметили, он печатает вперед до тех пор, пока не дойдет до последней буквы, а затем печатает назад. Любые предложения о том, как это сделать, очень ценятся.

EDIT: Я НЕ пытаюсь обмануть. Я полностью зациклен на том, как подойти к этому, поэтому я прошу предложения по этому поводу, а не для того, чтобы кто-то дал мне код для всей программы. Благодарю.

+1

Где ваш код? –

+1

Это не сайт для мошенничества в вашей домашней работе. – MrEricSir

+0

@isabits Каков диапазон для изображения треугольника? A-G? –

ответ

0

Решение aardvarkk является лучшим, но если вы хотите вариант с только одной функции:

#include <iostream> 
using namespace std; 


void recursivePrintLettersTriangle (char start, char end, char current, int space, bool newLine) { 
    // Print spaces 
    if ((current + space) < end) { 
     std::cout << ' '; 
     recursivePrintLettersTriangle(start, end, current, space + 1, newLine); 
    // Print letters 
    } else if (start <= current) { 
     std::cout << start; 

     if (start < current) { 
      recursivePrintLettersTriangle(start + 1, end, current, space, false); 
      std::cout << start; 
     } 

     // Go to next line 
     if (newLine) { 
      std::cout << std::endl; 

      if (current < end) { 
       recursivePrintLettersTriangle(start, end, current + 1, 0, newLine); 
      } 
     } 
    } 
} 

void showLettersTriangle (char start, char end) { 
    recursivePrintLettersTriangle(start, end, start, 0, true); 
} 

int main() { 
    showLettersTriangle('a', 'g'); 

    return 0; 
} 
+0

Да, я не буду использовать одну функцию, потому что это оказалось больше, чем я думал, и я все еще новичок в этом. Просто учитель трудный. Спасибо, что ответили! – lisabits

-1

Это поможет вам. Try it here.

#include <iostream> 
using namespace std; 

void spaces(char space) { 
    if (space <= 0) { 
     return; 
    } 
    std::cout << " "; 
    spaces(space-1); 
} 

void line(char start, char end, char space) { 
    if (start != end) { 
     std::cout << start; 
     line(start+1, end, space-1); 
     std::cout << start; 
    } else { 
     std::cout << end; 
    } 
} 

void countdown(char start, char end, char space) { 
    ++space; 
    if (start != end) { 
     countdown(start, end-1, space); 
    } 
    spaces(space); 
    line(start, end, space); 
    spaces(space); 
    std::cout << std::endl; 
} 

void range(char start, char end) { 
    countdown(start, end, 0); 
} 

int main() { 
    range('a', 'g'); 
    return 0; 
} 
+0

Да, я думал, что все это будет всего лишь одна рекурсивная функция. Но я вижу, что у вас есть пробелы рекурсивно. – lisabits

+0

Можно было бы сделать это с помощью одной функции. Я не достаточно умен для таких задач :) – aardvarkk

+0

Хорошо, спасибо, что дали мне направление, чтобы пойти, вместо того, чтобы быть рывком, как некоторые люди на этом сайте :) ... Как и они, меня голосуют и срыгивают комментарии. – lisabits

Смежные вопросы