Мне нужно рекурсивно нарисовать песочные часы в C. Мне нужно иметь 1 вспомогательную функцию плюс фактическую функцию. Вот подписи функций: void helper (unsigned int height, unsigned int offset) void real (unsigned int height)
Где высота описывает количество строк, которые нужно нарисовать, а offset это количество пробелов в начале каждого ряда. Для каждой строки количество звездочек должно уменьшиться на 2, смещение должно увеличиться на 1, а высота должна уменьшиться на 1, пока вы не достигнете середины песочных часов. После этого высота должна продолжать уменьшаться, но количество звездочек должно увеличиваться на 2, а смещение должно уменьшаться на 1. Если входная высота четная, то в первом ряду должна быть высота - 1 звезда. Кроме того, середина должна иметь два ряда по 1 звезде. Если входная высота нечетная, то в первом ряду должна быть высота звездочек.
Ex) height = 6
*****
***
*
*
***
*****
Ex) height = 5
*****
***
*
***
*****
Я должен использовать рекурсию, циклы не допускаются.
Вот что у меня есть для вспомогательной функции. У меня проблемы с выяснением основной функции.
void draw_hourglass_rec_helper(unsigned int height, unsigned int offset)
{
if (height == 0) {
printf("\n");
} else if (offset == 0) {
printf("*");
draw_hourglass_rec_helper(height-1, 0);
} else {
printf(" ");
draw_hourglass_rec_helper(height, offset-1);
}
}
Лучшая попытка:
void draw_hourglass_rec(unsigned int height)
{
if(height < 1)
{
return;
}
{
draw_hourglass_rec_helper(height, ((-0.5 * height) + (9.0/2.0)));
draw_hourglass_rec(height-2);
}
}
отпечатков:
**********
********
******
****
**
для draw_hourglass_re c (10) Проблемы с парой 1) Я не могу напечатать нижняя половина песочных часов 2) Количество звезд всегда должно быть нечетным 3) Я не знаю, как express четный случай ввода, где должно быть 2 строки по 1 звезде каждая 4) Если я использую этот код на нечетная высота, я падаю в бесконечное l oop.
Это моя первая неделя кодирования в C. У меня действительно возникают проблемы с выражением моей логики c на этом языке.
Заранее спасибо.