Мне было предложено новое домашнее задание, которое, по меньшей мере, было несколько разочаровывающим. По сути, у меня есть создать двумерный массив целых чисел следующим образом:
97 47 56 36 60 31 57 54 12 55
35 57 41 13 82 80 71 93 31 62
89 36 98 75 91 46 95 53 37 99
25 45 26 17 15 82 80 73 96 17
75 22 63 96 96 36 64 31 99 86
12 80 42 74 54 14 93 17 14 55
14 15 20 71 34 50 22 60 32 41
90 69 44 52 54 73 20 12 55 52
39 33 25 31 76 45 44 84 90 52
94 35 55 24 41 63 87 93 79 24
и я должен написать рекурсивный метод или функцию, как вы хотите, чтобы вычислить самую длинную возрастающую подпоследовательность. В этом примере самая длинная увеличивающаяся подпоследовательность следующая:
(5,0) with value 12
(6,0) with value 14
(6,1) with value 15
(6,2) with value 20
(7,2) with value 44
(7,3) with value 52
(7,4) with value 54
(6,3) with value 71
(5,3) with value 74
(4,3) with value 96
Итак, я должен не только проверять значения N, S, E, W на строго большие значения, но я также должен учитывать диагонали. Я провел обширные исследования того, как решить эту проблему рекурсивно, однако мне не повезло, и рекурсия - мой самый слабый предмет (да, я знаю, насколько мощным он может быть в определенных ситуациях). Я видел что-то подобное, где кто-то упоминал акриловую графику, но это не то, что я ищу.
До сих пор я в основном дополнял свой 2D-массив нулями, чтобы мне не приходилось беспокоиться об ограничении, и я использую вложенные циклы for для обхода 2D-массива. Внутри этих циклов я в основном проверяю, имеют ли N, NE, E, SE, S, SW, W, NW большее значение, чем текущий элемент. Извините, если я вас расстроил, это моя первая попытка публикации. Если вам нужно, чтобы я опубликовал код, я сделаю это. Большое спасибо за ваше время!