Дана последовательность ненулевых чисел после которой следует 0. Рекурсия

Такая задачка: Дана последовательность ненулевых чисел, за которой следует 0. Напечатать сначала все отрицательные , а затем все положительные числа этой последовательности(в любом порядке). ВАЖНО! Сделать, чтобы код это делал через рекурсивный алгоритм.

В общем и целом я не знаю как правильно задать параметры функции. Чтобы именно эти блоки работали верно

        int[] row = { -2, 3, 5, 2, -3, 0 };
        bool bPositive = false;
        static int Recursion(....)
        {
           
            if (row[i])
            {
                if (bPositive && row[i] < 0)
                {
                    Console.WriteLine(row[i] + " ");
                }
                if (!bPositive && row[i] > 0)
                {
                    Console.WriteLine(row[i] + " ");
                }
                Recursion(i + 1, bPositive);
            }
        }
        static int Recursion(....)
        {
            Recursion(row, 0, true);
            Recursion(row, 0, false);
            return 0
        }

Ответы (3 шт):

Автор решения: Zhihar

по идее алгоритм мог бы быть простым:

пройтись по последовательности до 0 2 раза - первый раз выводить только отрицательные числа, второй - только положительные

но в этом случае не будет рекурсии

в качестве рекурсионного алгоритма можно сделать функцию, которая на вход принимает массив, и позицию в массиве

внутри функция show_negative выбирает значение arr[pos], выводит его для отрицательных чисел и вызывает себя, но с новой позицией show_negative(arr, pos + 1)

если нашла значение 0 - то просто функция прекращает выполнение

тоже самое для положительных чисел - функция show_positive

вот это уже рекурсионный алгоритм

По идее можно совместить обе функции (для отрицательных и положительных чисел в одну) - будем считать, что пока мы идем слева направо, то выводим только отрицательные, а справа налево - положительные

тогда функция будет содержать еще и 3 параметр - isNegative который может быть true или false

если isNegative == true делаем все как функция show_negative, при достижении 0 меняем isNegative = false и делаем все как функция show_positive, при достижении позиции -1 прекращаем выполнять функцию

в результате будет сначала выведен список отрицательных чисел, потом положительных

→ Ссылка
Автор решения: vp_arth

Вообще, всё гораздо проще же.
Отрицательные выводим сразу, положительные - после погружения в стек.

Вместо псевдокода напишу на js:

function foo(a) {
  if (a.length === 0) return;

  const num = a[0];

  if (num === 0) return;
  if (num  < 0)  console.log(num);
  foo(a.slice(1))
  if (num  > 0) console.log(num);
}

const a = [-2, 3, 5, 2, -3, 0];

foo(a);
  

→ Ссылка
Автор решения: TheDesireToBelieve

Переписал код с советов:

static void Main(string[] args)
        {
            int[] mass = new int[] { 12, -2, -3, 5, 6, 12, 0 };
            print(mass);
            Console.ReadKey();
        }

        static void print(int[] mass, int i = 0)
        {
            int num = mass[i];
            if (num == 0)
            {
                return;
            }
            if (num < 0)
                Console.Write(num + " ");
            print(mass, ++i);
            if (num > 0)
                Console.Write(num + " ");
        }
→ Ссылка