1 of 35

Discrete Mathematics

Chapter 4 �歸納(Induction)與遞迴(Recursion)

大葉大學 資訊工程系 黃鈴玲

2 of 35

4.1 數學歸納法

例:爬「無限長」的梯子

Ch4-2

已知:�1. 我們能到達梯子的第一階。�2. 假設能到達梯子的某一階,就必能到達梯子的下一階。

問:我們是否能到達這個梯子的每一階?

3 of 35

Ch4-3

4 of 35

注意 : 數學歸納法只能用來證明某個公式的正確性,不能用來� 找出公式.

Ch4-4

P(n) : 一個命題式函數 (例如: n ≤ 2n)

使用數學歸納法來證明 “P(n) 對所有正整數n皆為真”� 包含以下兩個步驟:

1. 基礎步驟(Basis): 證明P(1)為真

(即:n代入1時公式成立)

(若 n 0 開始則證 P(0)為真,要證明式子在n最小時會成立)

2. 歸納步驟(Inductive) :� 證明當k為任意正整數時,P(k)成立則P(k+1)也成立

(即:假設n代入k時公式成立,� 利用此假設,證明假設n代入k+1時公式成立)

5 of 35

Example 1 證明當n為正整數時, .

Proof.

(Basis) n=1時: 成立

(Inductive) 假設n=k時上式成立,

即:

n=k+1時,

左式= 1+2+…+k+(k+1)

=

= = 右式,故由歸納法得證

Ch4-5

6 of 35

Example 2. 使用歸納法證明n個正奇數的和是n2.

注意:其實不用歸納法也可以得証:

Pf :�

Basis : n=1時: 1 = 12 成立�

Inductive : 假設n=k時上式成立,即:

1+3+5+…+(2k1) = k2

n=k+1時,左式= 1+3+5+…+(2k1)+(2k+1)

= k2 + 2k+1 = (k+1)2 =右式

根據數學歸納法得證。

Ch4-6

7 of 35

Example 5. 利用數學歸納法證明:�“對所有正整數n,不等式 n < 2n 都成立”。

pf :

Basis: n=1時,1 < 21 成立.

Inductive :

假設n=k 時上式成立,即 k < 2k.

n=k+1 :

左式= k + 1

< 2k + 1

≤ 2k + 1 =右式

k + 1 < 2k + 1 也成立

故根據數學歸納法得證。

Ch4-7

8 of 35

Exercise 4.1

7. 證明當n為 ≥0 的整數時,

Ch4-8

3. 證明當n為任意正整數時,

9 of 35

Ch4-9

Example 7. The harmonic numbers Hk, k =1,2,3,…, are

defined by . Use MI to show that

Pf : Let P(n) be the proposition that “ ”.

Basis step : P(0) is true, since .

Inductive step : Assume that P(k) is true for some k,

i.e.,

Consider P(k+1) :

whenever n is a nonnegative integer.

(跳過)

10 of 35

Ch4-10

P(k+1) is true.

By MI, P(n) is true for all n∈Z+.

Exercise : 7, 13

(跳過)

11 of 35

4.2 Strong Induction(強數學歸納法)

  • Basis step 相同
  • Inductive step : Assume all the statements � P(1), P(2), …, P(k) are true. � Show that P(k+1) is also true.

Ch4-11

(跳過)

12 of 35

Ch4-12

Example 2. 證明若 n >1的整數,則 n 可以寫成質數的乘積。

Pf :P(n) 表示 “n 可以寫成質數的乘積” 這一命題.

Basis : P(2) is true, 因為 2 是質數

Inductive : 假設 P(2), P(3), …, P(k) 都是true.

考慮 P(k + 1) :

Case 1 : k + 1 is prime ⇒ P(k+1) is true

Case 2 : k + 1 is composite, � i.e., k + 1 = ab where 2 a bk+1

根據歸納法的假設, a b可以寫成質數的乘積.

k + 1也是質數的乘積

P(k+1) is true.

根據強數學歸納法得證.

Note: 此題無法僅用普通的歸納法證明

(跳過)

13 of 35

Ch4-13

Example 4. Prove that every amount of postage of 12 cents or more can be formed using just 4-cent and 5-cent stamps.

Pf : Let P(n) be the statement that the postage of n cents can � formed using just 4-cent and 5-cent stamps.

Basis : P(12) is true, since 12 = 4 × 3;

P(13) is true, since 13 = 4 × 2 + 5 × 1;

P(14) is true, since 14 = 4 × 1 + 5 × 2;

P(15) is true, since 15 = 5 × 3;

Inductive : Assume P(12), P(13), …, P(k) are true.

Consider P(k+1) :

Suppose k3 = 4 × m + 5 × n.

Then k+1 = 4 × (m+1) + 5 × n.

P(k+1) is true.

By Strong MI, P(n) is true if n∈Z and n ≥12.

Exercise : 7

(k3 ≥ 12)

(跳過)

14 of 35

4.3 遞迴定義.

Def. 使用一個物件本身來定義它自己的過程稱為recursion(遞迴).

例: 定義一個無窮數列 1, 2, 4, 8, 16, 32, 64, …時

(1) 使用明確的公式,可寫成:

an=2n, n=0,1,2,…

(2) 使用遞迴的形式,可寫成:

初始值a0=1,

遞迴式an+1=2an, n=0, 1, 2, …

Ch4-14

15 of 35

Ch4-15

Example 1. 假設函數 f 以遞迴方式定義如下:

f(0)=3, f(n+1) = 2f(n)+3

求出 f(1), f(2), f(3), f(4).

Sol :

f(1) = 2f(0) + 3 =9

f(2) = 2f(1) + 3 =21

f(3) = 2f(2) + 3 =45

f(4) = 2f(3) + 3 =93

16 of 35

Example 2. 寫出階乘函數 F(n) = n! 的遞迴定義。

Sol :

初始值 : F(0) = 1

遞迴式 : F(n+1) = (n+1)!, F(n) =n! � F(n+1) = F(n) ⋅ (n+1)

Ch4-16

Def1, Example 5. 費式數(Fibonacci numbers) f0, f1, f2, …

定義如下: 初始值f0 = 0, f1 = 1,

遞迴式fn = fn1 + fn2, for n = 2,3,4,…

What is f5 ?

Sol :

f2 = f1 + f0 =1

f3 = f2 + f1 =2

f4 = f3 + f2 =3

f5 = f4 + f3 =5

17 of 35

Exercise 4.3

1. 根據 f(0)=1 與下列遞迴定義的 f(n) (n = 0, 1, 2, …),� 求出 f(1), f(2), f(3), f(4)。� (b) f(n+1) = 3f(n)� (d) f(n+1) = f(n)2 + f(n) + 1

Ch4-17

3. 根據 f(0)= 1,f(1)= 2 與下列遞迴定義的 f(n) � (n = 0, 1, 2, …),求出 f(2), f(3), f(4), f(5)。� (a) f(n+1) = f(n) + 3f(n1) �

8. 找出序列{an} (n = 1, 2, 3, …) 的遞迴定義,若� (a) an = 4n 2 � (c) an = n (n 1)

18 of 35

Example 6. Show that fn > α n2 , where

Ch4-18

Pf: ( By Strong MI )

Let P(n) be the statement fn >α n2 .

Basis: f3 = 2 > α

so that P(3) and P(4) are true.

Inductive: Assume that P(3), P(4), …, P(n) are true.

We must show that P(n+1) is true.

fn+1 = fn + fn1 > α n2 + α n3

= α n3(α +1)

α +1= α 2

fn+1 > α n3 α 2 = α n1

We get that P(n+1) is true.

By Strong MI , P(n) is true for all n 3

(跳過)

19 of 35

※Recursively defined sets.

Example 7. Let S be defined recursively by

3∈S

x+y∈S if x∈S and y∈S.

Show that S is the of positive integers divisible by 3

(i.e., S = { 3, 6, 9, 12, 15, 18, … }

Pf:

Let A be the set of all positive integers divisible by 3.

We need to prove that A=S.

(i) A ⊆ S : (By MI)

Let P(n) be the statement that 3n∈S

(ii) S ⊆ A : (利用S的定義)

(1) 3 ∈ A ,

(2) if x∈A,y∈A, then 3|x and 3|y.

⇒ 3|(x+y) ⇒ x+y∈A

S ⊆ A

Ch4-19

S = A

(跳過)

20 of 35

Definition 2. The set of strings over an alphabet ∑ � is denoted by ∑*. The empty string is denoted � by λ, λ ∈∑, and wx∈∑* whenever w∈∑* and x∈∑.�eg. ∑ = { a, b, c }�� ∑* = { λ, a , b , c , aa , ab , ac , ba , bb , bc, …� abcabccba, …}

Example 9. Give a recursive definition of l(w),� the length of the string w∈∑*

Sol :

initial value : l(λ)=0

recursive def : l(wx)=l(w)+1 if w∈∑*, x∈∑.

Ch4-20

λa

λb

λc

(跳過)

21 of 35

Exercise 13, 48, 49

Exercise 39. When does a string belong to the set A of bit strings defined recursively by

λ∈A

0x1∈A if x∈A.

Sol :

A={λ, 01 , 0011, 000111, …}

∴當bit string α = 000…011…1

α∈A

Ch4-21

n

n

0λ1

(跳過)

22 of 35

  • Ackermann’s function

A(m, n) = 2n if m = 0

0 if m ≥ 1 and n = 0

2 if m ≥ 1 and n = 1

A(m1, A(m, n1)) if m ≥ 1 and n ≥ 2

Exercise 49 Show that A(m,2)=4 whenever m ≥ 1

Pf :

A(m,2) = A(m1, A(m,1)) = A(m1,2) whenever m 1.

A(m,2) = A(m1,2) = A(m2,2) = … = A(0,2) = 4.

Ch4-22

(跳過)

23 of 35

4.4 遞迴演算法

※ 有時,我們能將有特定輸入集合的問題簡化,變成輸 � 入值較小的相同問題。

例. gcd(a, b) = gcd(b mod a, a) (when a < b)� 重複此法至b mod a = 0,就找到gcd了

Def 1. 藉由把問題簡化到更小輸入的相同問題來解決問題的演算法,稱為遞迴演算法

Ch4-23

24 of 35

Example 1. 求出計算 n!的遞迴演算法, 其中 n為� 非負整數.

Ch4-24

Sol : n! 的遞迴定義:

初始值: 0! =1

遞迴式: n! = n ⋅ (n1)!.

Algorithm 1.

Procedure factorial(n : nonnegative integer)

if n = 0 then factorial(n):=1

else factorial(n):= n × factorial(n1)

要求出4! 時:

4! = 4⋅3!,

3! = 3⋅2!,

2! = 2⋅1!,

1! = 1⋅0!,

0! = 1,

代回得到 1! = 1,

2! = 2,

3! = 6,

4! = 24

25 of 35

Ch4-25

Algorithm 1.

Procedure factorial(n : nonnegative integer)

if n = 0 then factorial(n):=1

else factorial(n):= n × factorial(n1)

Algorithm 1.

Procedure factorial(n : nonnegative integer)

if n = 0 then return(1)

else return(n × factorial(n1))

遞迴呼叫自己

也可改寫為:

26 of 35

用Algorithm 1求出4!的過程:

Ch4-26

Algorithm 1.

Procedure factorial(n : nonnegative integer)

if n = 0 then factorial(n):=1

else factorial(n):= n × factorial(n1)

factorial(4) = 4 × factorial(3)

= 3 × factorial(2)

= 2 × factorial(1)

= 1 × factorial(0) = 1 × 1=1

= 2 × 1 =2

= 3 × 2 =6

= 4 × 6 = 24

27 of 35

Example 2. 求出計算 an,的遞迴演算法, 其中 a為實數,n為非負整數。

Ch4-27

Sol :

an的遞迴定義 :

初始值: a0=1

遞迴式: an = a an1.

Algorithm 2.

Procedure power(a : number, n : nonnegative integer)

if n = 0 then power(a, n):=1

else power(a, n):= a × power(a, n1).

28 of 35

Exercise 4.4

補充: 根據演算法2的步驟,以a=2, n=4為輸入, � 詳細寫出求出24的值之過程。

Ch4-28

Algorithm 2.

Procedure power(a : number, n : nonnegative integer)

if n = 0 then power(a, n):=1

else power(a, n):= a × power(a, n1).

29 of 35

Example 4. 寫出求 gcd(a,b) 的遞迴演算法,其中 a<b.

Sol :

Ch4-29

Algorithm 4.

procedure gcd(a,b : nonnegative integers with a<b)

if a=0 then gcd(a,b) := b

else gcd(a,b) := gcd(b mod a, a).

遞迴式:gcd(a,b) := gcd(b mod a, a)

初始值:gcd(0,b) := b

30 of 35

Exercise 4.4

6. 根據演算法4的步驟,求出gcd(8, 13)的值。

Ch4-30

Algorithm 4.

procedure gcd(a,b : nonnegative integers with a<b)

if a=0 then gcd(a,b) := b

else gcd(a,b) := gcd(b mod a, a).

29. 設計一個遞迴演算法來找出數列的第n項,其中 � a0=1,a1=2,而an= an1× an2n=2, 3, …。

31 of 35

Ch4-31

Example 5. Search x in a1, a2,…,an by Linear Search

Sol :

Alg. 5

procedure search (i, j, x: integers)

if ai = x then location := i

else if i = j then location := 0

else search(i+1, j, x)

ai,ai+1,…aj x

call

search(1, n, x)

(跳過)

32 of 35

Example 6. Search x from a1,a2,…,an by binary search (recursive version).

Sol :

Ch4-32

Alg. 5

procedure binary_search (x , i , j: integers)

m := ⎣(i+j) / 2⎦

if x = am then location := m

else if (x < am and i < m) then

binary_search(x, i, m1)

else if (x > am and j > m) then

binary_search(x, m+1, j)

else location := 0

call binary_search(x, 1, n)

search x from ai, ai+1, …, aj

表示左半邊� ai, ai+1, …, am1

至少還有一個元素

(跳過)

33 of 35

Example 1. Give the value of n!, nZ+

Ch4-33

Sol :

Note : n! = n × (n1)!

Alg. 1 (Recursive Procedure)

procedure factorial (n: positive integer)

if n = 1 then factorial (n) := 1

else factorial (n) := n × factorial (n1)

Alg. (Iterative Procedure)

procedure iterative_factorial (n : positive integer)

x := 1

for i := 1 to n

x := i x

{ x = n! }

(跳過)

34 of 35

※ iterative alg. 的計算次數通常比 recursive alg.少

※ Find Fibonacci numbers

(Note : f0=0, f1=1, fn=fn1+fn2 for n2)

Ch4-34

Alg. 7 (Recursive Fibonacci)

procedure Fibonacci (n : nonnegative integer)

if n = 0 then Fibonacci (0) := 0

else if n = 1 then Fibonacci (1) := 1

else Fibonacci (n) := Fibonacci (n1)+Fibonacci (n2)

(跳過)

35 of 35

Ch4-35

Alg.8 (Iterative Fibonacci)

procedure iterative_fibonacci (n: nonnegative integer)

if n = 0 then y := 0 // y = f0

else begin

x := 0

y := 1 // y = f1

for i := 1 to n1

begin

z := x + y

x := y

y := z

end

end

{y is fn }

Exercise : 11, 35

i = 1

i = 2

i = 3

z

f2

f3

f4

x

f1

f2

f3

y

f2

f3

f4

(跳過)