Помимо математического доказательства вашей логики (пример: индуктивное доказательство ), есть некоторые результаты в вычислительной науке, связанные с этим.
Вы можете начать здесь с краткого описания предмета: Правильность
В вашем конкретном случае вас заинтересует частичная правильность, чтобы показать, что ответ является намеченным.Тогда полная корректность, чтобы показать, что программа завершается.
Логика Hoare может решить вашу частичную корректность.
Что касается завершения для этой конкретной проблемы:
Если (n% 2 == 0 и k% 1 == 1) или (k == 0) программа завершается, в противном случае она возвращается к случаю n / 2, k / 2.
Использование strongПо индукции по k мы можем показать, что программа всегда достигает одного из терминальных узлов, где k == 0.(Это может закончиться раньше в первом предложении, но нам нужно было только показать, что оно вообще заканчивается, что и происходит)
Так что я оставил вам подтверждение частичной корректности (потому что я не знаю,этот материал)