Докажем правильность по индукции по n
, количеству элементов в массиве. Ваш диапазон неверен, он должен быть от 0 до n-1 или от 1 до n, но не от 0 до n. Примем от 1 до п.
В случае n = 0 (базовый случай) мы просто проходим алгоритм вручную. counter
начинается со значения 0, цикл не повторяется, и мы возвращаем значение счетчика, которое, как мы сказали, было 0. Это правильно.
Мы можем сделать второй базовый случай (хотя он и не нужен, как в обычной математике). п = 1. Счетчик инициализируется с 0. Цикл делает один проход, в котором i
принимает значение 1, и мы увеличиваем counter
, если первое значение в a
делится на k
(что верно из-за очевидного правильность алгоритма Check
).
Поэтому мы возвращаем 0, если a[1]
не делится на k
, а в противном случае мы возвращаем 1. Этот случай также работает.
Индукция проста. Мы предполагаем правильность для n-1 и докажем для n (опять же, как в обычной математике). Чтобы быть правильно формальным, отметим, что counter
содержит правильное значение, которое мы возвращаем к концу последней итерации в цикле .
По нашему предположению, мы знаем, что после n-1 итераций counter
содержит правильное значение относительно первых n-1 значений в массиве. Мы вызываем базовый случай n = 1, чтобы доказать, что он добавит 1 к этому значению, если последний элемент делится на k, и, следовательно, конечное значение будет правильным значением для n.
QED.
Вам просто нужно знать, по какой переменной выполнять индукцию. Обычно размер ввода наиболее полезен. Кроме того, иногда вам нужно предполагать правильность для всех натуральных чисел меньше, чем n, иногда просто n-1. Опять же, как в обычной математике.