关于数学归纳法的内容就不写了,直接写递归了,我还是偏向工程性强的内容。
直接来看看递归定义的使用。
为了定义非负整数集合作为其定义域的函数,使用两个步骤:
基础步骤:规定这个函数在0处的值。
递归步骤:给出从较小的整数处的值来求出当且的值的规则
字母表 Σ \Sigma Σ上的字符串的集合 Σ ∗ \Sigma^* Σ∗递归的定义为:
基础步骤: λ ∈ Σ ∗ \lambda \in \Sigma^* λ∈Σ∗(其中 λ \lambda λ是不包含任何符号的空串)。
递归步骤:若 ω ∈ Σ ∗ \omega \in \Sigma^* ω∈Σ∗且 x ∈ Σ x\in \Sigma x∈Σ时,则 ω x ∈ Σ ∗ \omega x\in\Sigma^* ωx∈Σ∗。
一下这些步骤可以递归的定义根树的集合,其中根树是由一个顶点集合和连接这些顶点的边组成,顶点集合包含的一个特殊顶点,称为树根。
基础步骤:单个顶点r是根树
递归步骤:假设 T 1 , T 2 , . . . , T n T_1,T_2,...,T_n T1,T2,...,Tn是根树,分别带有树根 r 1 , r 2 , . . . , r n r_1,r_2,...,r_n r1,r2,...,rn。则如下形成的图也是根树:从树根r开始,r不属于根数 T 1 , T 2 , . . . , T n T_1,T_2,...,T_n T1,T2,...,Tn中的任何一个,从r到顶点 r 1 , r 2 , . . . , r n r_1,r_2,...,r_n r1,r2,...,rn每个都加入一条边。
此外递归还能定义更多的东西。
定 义 1 : 若 一 个 算 法 通 过 把 问 题 归 约 到 带 更 小 输 入 的 相 同 的 问 题 的 实 例 来 解 决 原 来 的 问 题 , 则 这 个 算 法 称 为 递 归 的 。 {\color{Purple}{定义\,1:}}\,若一个算法通过把问题归约到带更小输入的相同的问题的实例来解决原来的问题,\\则这个算法称为递归的。 定义1:若一个算法通过把问题归约到带更小输入的相同的问题的实例来解决原来的问题,则这个算法称为递归的。
递归算术的更多内容将会在算法导论中看到。
程序与数学是密不可分的。
如果确定一个程序是正确的呢?
简单来说,若对每个输入程序都产生正确的输出,则说这个程序是正确的。
一个程序的正确性证明需要两个部分。第一部分证明:若程序终止,则获得正确的答案。完成第一部分,则称程序是部分正确的。第二部分证明:程序总是终止。
定 义 1 : 若 当 一 个 程 序 或 程 序 段 S 的 输 入 值 来 说 初 始 断 言 p 为 真 时 , 就 有 对 S 的 输 出 值 来 说 终 结 断 言 q 为 真 , 则 说 S 是 相 对 于 p 和 q 部 分 正 确 的 。 记 号 p { S } 说 明 程 序 或 程 序 段 S 是 相 对 于 初 始 断 言 p 和 终 结 断 言 q 部 分 正 确 的 。 {\color{Purple}{定义\,1:}}\,若当一个程序或程序段S的输入值来说初始断言p为真时,就有对S的输出值来说终结断言q为真,\\ 则说S是相对于p和q部分正确的。\\ 记号p\left\{S\right\}说明程序或程序段S是相对于初始断言p和终结断言q部分正确的。 定义1:若当一个程序或程序段S的输入值来说初始断言p为真时,就有对S的输出值来说终结断言q为真,则说S是相对于p和q部分正确的。记号p{S}说明程序或程序段S是相对于初始断言p和终结断言q部分正确的。
记号 p { S } q p\left\{S\right\}q p{S}q称为霍尔三元组。
合成规则
p { S 1 } q q { S 2 } r ∴ p { S 1 ; S 2 } r p\left \{S_1\right\}q\\ q\left \{S_2\right\}r\\ \therefore p\left\{S_1;S_2\right\}r p{S1}qq{S2}r∴p{S1;S2}r
条件语句
对于条件语句
if condition then
S
将得到如下推理规则
( p ∧ c o n d i t i o n ) { S } q ( p ∧ ┐ c o n d i t i o n ) → q ∴ p ( i f c o n d i t i o n t h e n S ) q (p\land condition)\left\{S\right\}q\\ (p\land ┐condition)\rightarrow q\\ \therefore p(if\,condition\,then\,S)q (p∧condition){S}q(p∧┐condition)→q∴p(ifconditionthenS)q
如下条件语句
if condition then
S1
else
S2
将得到如下推理规则
( p ∧ c o n d i t i o n ) { S 1 } q ( p ∧ ┐ c o n d i t i o n ) { S 2 } q ∴ p { i f c o n d i t i o n t h e n S 1 e l s e S 2 } q (p\land condition)\left\{S_1\right\}q\\ (p\land ┐condition)\left\{S_2\right\}q\\ \therefore p\left\{if\,condition\,then\,S_1\,else\,S_2\right\}q (p∧condition){S1}q(p∧┐condition){S2}q∴p{ifconditionthenS1elseS2}q
循环语句
在循环中将有一个循环不变量的概念
对于循环语句
while condition
S
每次执行S都为真的的断言,即是循环不变量
( p ∧ c o n d i t i o n ) { S } p ∴ p { w h i l e c o n d i t i o n S } ( ┐ c o n d i t i o n ∧ p ) (p\land condition)\left\{S\right\}p\\ \therefore p\left\{while\,condition\,S\right\}(┐condition\land p) (p∧condition){S}p∴p{whileconditionS}(┐condition∧p)