Самая длинная, последовательная, восходящая подпоследовательность массива
Я застрял, выполняя задание для университета. Задача состоит в том, чтобы найти рекурсивный, а затем динамический способ программирования для вычисления длины самой длинной, последовательной, восходящей подпоследовательности массива. Например, если массив: {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
последний элемент подпоследовательности