а2, …, ai} (i ? 1) сопоставим число lmax, равное максимальной длине равнинного участка этой последовательности. Очевидно, что lmax ({a1}) = 1. Пусть мы знаем lmax ({a1, а2, …, ai}). Как вычислить величину lmax ({a1, …, ai, ai+1})? Добавление элемента ai+1 к последовательности {a1, а2, …, ai} не затрагивает равнинных участков этой последовательности, кроме, быть может, последнего. Если ai+1 = ai, то длина этого последнего участка — назовем ее llast ({a1, …, ai}) — увеличивается на единицу. Если величина llast ({a1, …, ai, ai +1}) окажется при этом больше величины lmax ({a1, а2, …, ai}), то это значит, что последний равнинный участок в последовательности {a1, а2, …, ai, ai+1} по крайней мере на 1 длиннее всех предыдущих, и, значит, lmax ({a1, а2, …, ai, ai+1}) = llast ({a1, а2, …, ai, ai +1}).
Введем четыре величины:
i — число рассмотренных членов последовательности,
lmax — максимальная длина равнинного участка для рассмотренных элементов,
llast — длина последнего равнинного участка для рассмотренных элементов,
xlast — последний рассмотренный элемент последовательности (он равен а[i]).
Теперь приведем без пояснений программу, которая вычисляет lmax ({a1, …, an}) по индукции.
i := 1; lmax := 1; llast := 1; xlast := a[1]
нц пока i < n
x := a[i + 1]
если x = xlast то llast := llast + 1
иначе llast := 1 кесли
если llast > lmax то lmax := llast кесли
xlast := x
i := i + 1
кц
вывод lmax
Подробнее об этой индуктивной методике можно прочитать в книге: А. Г. Кушниренко, Г. В. Лебедев. Программирование для математиков. — М.: Наука, 1988. — Примеч. ред.