归纳法
数学归纳法
有时候需要证明如下的命题:
P ( n ) P(n) P(n)对于某个范围的所有整数n都成立
要证明这样的命题就需要归纳法。
归纳法主要分2步:
- 基底的证明:证明对于该范围中的最小的整数 i i i,该命题成立
- 归纳的证明:证明对于 i i i以上的任何整数 k k k,“若 P ( k ) P(k) P(k)成立,则 P ( k + 1 ) 也成立 P(k+1)也成立 P(k+1)也成立”
求奇数的和
试证明: 命题 P ( n ) P(n) P(n): 1 + 3 + 5 + 7 + ⋯ + ( 2 × n − 1 ) = n 2 1+3+5+7+ \cdots +(2 \times n-1)=n^2 1+3+5+7+⋯+(2×n−1)=n2对于1以上的所有整数 n n n都成立。
- 步骤1:基底的证明
P ( 1 ) = 1 2 P(1)=1^2 P(1)=12, P ( 1 ) P(1) P(1)成立 - 步骤2:归纳的证明
假设对于任何整数 k ≥ 1 k \geq 1 k≥1, P ( k ) P(k) P(k)成立,即
1 + 3 + 5 + 7 + ⋯ + ( 2 × k − 1 ) = k 2 1+3+5+7+ \cdots +(2 \times k-1)=k^2 1+3+5+7+⋯+(2×k−1)=k2
则 P ( k + 1 ) = P(k+1)= P(k+1)=
1 + 3 + 5 + 7 + ⋯ + ( 2 × k − 1 ) + ( 2 × ( k + 1 ) − 1 ) = k 2 + ( 2 × ( k + 1 ) − 1 ) = k 2 + 2 × k + 2 − 1 = k 2 + 2 × k + 1 = ( k + 1 ) 2 1+3+5+7+ \cdots +(2 \times k-1)+(2 \times (k+1)-1) \\ =k^2+(2 \times(k+1)-1) \\ = k^2 + 2 \times k + 2 -1 \\ = k^2 + 2 \times k + 1 \\ = (k+1)^2 1+3+5+7+⋯+(2×k−1)+(2×(k+1)−1)=k2+(2×(k+1)−1)=k2+2×k+2−1=k2+2×k+1=(k+1)2
也成立。
由步骤1,步骤2可证对于任何1以上的所有整数 n n n,都有 1 + 3 + 5 + 7 + ⋯ + ( 2 × n − 1 ) = n 2 1+3+5+7+ \cdots +(2 \times n-1)=n^2 1+3+5+7+⋯+(2×n−1)=n2。
归纳法与编程中的循环
程序中的循环不变式相当于数学归纳法中证明命题 P ( n ) P(n) P(n)。
例如,对数组arr
中的所有数求和:
int sum = 0;
for( int i = 0; i < arr.size(); i++){
sum = sum + arr[i]
}
循环中不变的是循环体内的sum = sum + arr[i]
,换成数学语言就是:
对于任意 0 ≤ i ≤ a r r . s i z e ( ) 0 \leq i \leq arr.size() 0≤i≤arr.size(),数组arr中的前 i i i个元素的和都等于变量 s u m sum sum的值