Нужна помощь: код с рекурсией (Java). Задача: составить примере, используя - + * их числ массива и чтобы ответ был не больше/меньше отрезка

Имеется задача, которую нужно решить используя рекурсию. Задача состоит в том, чтобы из числового массива (например [2,12,5,2]) составить примеры - 2+12+5+2, 2-12-5+2, 2+125-2, 212*5-2, используя + - * и чтобы ответ был в промежутке (предположим) [−15; 15]. На выходе должен получиться такой массив (String)

["2-12-5+2=-13",
"2-12+5-2=-7",
"2-12+5+2=-3",
"2-12+5*2=0",
"2+12-5*2=4",
"2+12-5-2=7",
"2+12-5+2=11",
"2*12-5*2=14"]

Пока что у меня нет идей для решения этой задачи, так как только начинаю знакомство с рекурсией. Буду очень благодарна за любую наводку или объяснение.

Имеется также начало метода:

class Rekursia {

    public static String[] aritmAvaldisedLõigus(int[] a, int x, int y){
        return null;
    }
    public static void main(String[] args) {
        int[] a={2,12,5,2};
        int x=-15;
        int y=15;
    }
}

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

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

Я сделал пример на C# и только для операций + и -, операцию * добавите сами. Там принцип тот же, но надо немного подумать.

Смысл в том, чтобы просто перебрать все варианты и из них выбрать те, которые в приеделах min-max

Вот так может выглядеть функция

public static void GetAllPermutations(int[] data, int index, string accum, int min, int max, int curr, HashSet<string> ret)
{
    if (index >= data.Length)
    {
        if (curr >= min && curr <= max)
        {
            accum += "=" + curr;
            ret.Add(accum);         
        }
        return ;
    }
    
    int number = data[index];
    
    GetAllPermutations(data, index+1, accum + "+" + number, min, max, curr + number, ret);
    GetAllPermutations(data, index+1, accum + "-" + number, min, max, curr - number, ret);
}

Вызывать это на C# можно так, на java будет чуть иначе выглядеть - разберетесь

int[] data = new int[] {2,12,5,2};
HashSet<string> ret = new HashSet<string>();    
GetAllPermutations(data, 1, data[0].ToString(), -15, 15, data[0], ret); 
Console.WriteLine(string.Join(Environment.NewLine, ret));

Вывод на консоль следующий

2+12-5+2=11
2+12-5-2=7
2-12+5+2=-3
2-12+5-2=-7
2-12-5+2=-13
→ Ссылка