Самый простой способ - определить набор входных данных вместе с их ожидаемыми выходными данными.Если это для упражнения, вам могут быть даны эти значения, или вам может понадобиться рассчитать несколько из них вручную.Затем я написал бы модульные тесты, используя эти известные входные данные, чтобы увидеть, соответствует ли каждый выходной результат ожидаемому значению.Если вы найдете места, где они не совпадают, проверьте оба ваших алгоритма и ожидаемые значения.Пройдите по шагам для каждой из сторон и выясните, какой из них неправильный (или если оба неправильны).
Другой вариант - написать тот же алгоритм на другом языке;в идеале, тот, где вы не можете скопировать и вставить реализацию алгоритма, чтобы предотвратить совместное использование общих ошибок.Затем запустите оба с тонна входов.Если у обеих реализаций есть совпадающие результаты для каждого входа, вы можете с большей уверенностью утверждать, что оба они верны.
Третий вариант - найти набор инвариантов, то есть вещей, которые доказуемо верны на разных этапах алгоритма.,Затем напишите тесты (или просто добавьте assert
операторов) во все те точки, которые показывают, что инварианты выполнены.Такие вещи, как for every iteration of the "i" loop, r' >= r
.Затем запустите его для большого диапазона входных данных, и если какое-либо из этих утверждений не сработает, вы можете начать копать и выяснить, какой крайний случай вы забыли обработать в своем алгоритме (например, что делать, если входное значение пустое?цифры? и т. д.)