Самая длинная, последовательная, восходящая подпоследовательность массива

Я застрял, выполняя задание для университета. Задача состоит в том, чтобы найти рекурсивный, а затем динамический способ программирования для вычисления длины самой длинной, последовательной, восходящей подпоследовательности массива. Например, если массив: {4, -5, -3, -2, 5, -2, 0, 3, 2}, максимальная длина будет равна 4 с подпоследовательностью {-5, -3, -2, 5}. У меня проблемы с поиском рекурсивного пути, и без рекурсивного пути невозможно найти динамичный путь для меня.
Я пытался что-то программировать, но я знаю, что это неправильно, и я не уверен, как это исправить:

public static int length(int[] arr,int j)
{
    if(arr.length == 1)
    {
        return 1;
    }
    if(j == 1)
    {
        if(arr[j-1] < arr[j])
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    else
    {
        int c = length(arr,j-1);
        if(arr[j-1] < arr[j])
        {
            return 1 + c;
        }
        else
        {
            return 0;
        }
    }
}

1 ответ

Попробуй это:

int length(int index, int previous)
    {
       if(arr.length == (index+1))
            return 0;
       else 
           if(arr[index] > previous)
               return 1+length(index+1,arr[index]);
           else return length(index+1,previous)
    }

Может быть, вам не нужно указывать массив в качестве аргумента при каждом рекурсивном вызове, создавая статическую переменную,

Previous последний элемент подпоследовательности

Другие вопросы по тегам