Мне интересно, существует ли какое-либо правило/схема работы с доказательством правильности алгоритма? Например, мы имеем функцию $ F $, определенная на множестве натуральных чисел и определено ниже:Общие доказательства стратегий, показывающих правильность рекурсивных функций?
function F(n,k)
begin
if k=0 then return 1
else if (n mod 2 = 0) and (k mod 2 = 1) then return 0
else return F(n div 2, k div 2);
end;
где $ п \ \ текст {ДИВ} \ 2 = \ слева \ lfloor \ гидроразрыва {п} {2} \ right \ rfloor $
Задача состоит в том, чтобы доказать, что $ F (n, k) = \ begin {cases} 1 \ Leftrightarrow {n \ select k} \ \ text {mod} \ 2 = 1 \ 0 \ text {other} \ end {cases} $
Это не выглядит очень сложным (я не прав?), но я не знаю, как это должно быть структурировано. Я был бы очень благодарен за помощь.
Мне нравится этот лучше, чем мой ответ. Вероятно, было бы неплохо добавить доказательство того, что 4 производных случая охватывают NxN, чтобы оправдать индуктивный вывод. –
Мне нравится этот подход больше всего. Но для меня все еще не просто, как использовать индукционную базу, чтобы показать эти последствия. – xan
Есть ли опечатка в f (2 * n + 1, k)? Это должно быть f (2 * n + 1, 2 * k)? – xan