## Foundations of Algorithms (2015)

### Appendix B Solving Recurrence Equations: With Applications to Analysis of Recursive Algorithms

**T**he analysis of recursive algorithms is not as straightforward as it is for iterative algorithms. Ordinarily, however, it is not difficult to represent the time complexity of a recursive algorithm by a recurrence equation. The recurrence equation must then be solved to determine the time complexity. We discuss techniques for solving such equations and for using the solutions in the analysis of recursive algorithms.

**B.1** Solving Recurrences Using Induction

Mathematical induction is reviewed in Appendix A. Here we show how it can be used to analyze some recursive algorithms. We consider first a recursive algorithm that computes *n*!.

**Algorithm B.1**

Factorial

Problem: Determine *n*! = *n* (*n −* 1) (*n −* 2) *· · ·* (3) (2) (1) when *n* ≥ 1.

0! = 1

Inputs: a nonnegative integer *n*.

Outputs: *n*!.

To gain insight into the efficiency of this algorithm, let’s determine how many times this function does the multiplication instruction for each value of *n*. For a given *n*, the number of multiplications done is the number done when *fact* (*n −* 1) is computed plus the one multiplication done when *n* is multiplied by *fact* (*n −* 1). If we represent the number of multiplications done for a given value of *n* by *t** _{n}*, we have established that

An equation such as this is called a *recurrence equation* because the value of the function at *n* is given in terms of the value of the function at a smaller value of *n*. A recurrence by itself does not represent a unique function. We must also have a starting point, which is called an *initial condition.* In this algorithm, no multiplications are done when *n* = 0. Therefore, the initial condition is

We can compute *t** _{n}* for larger values of

*n*as follows:

Continuing in this manner gives us more and more values of *t** _{n}*, but it does not enable us to compute

*t*

*, for an arbitrary*

_{n}*n*without starting at 0. We need an explicit expression for

*t*

*. Such an expression is called a*

_{n}*solution*to the recurrence equation. Recall that it is not possible to find a solution using induction. Induction can only verify that a candidate solution is correct. (Constructive induction, which is discussed in Section 8.5.4, can help us discover a solution.) We can obtain a candidate solution to this recurrence by inspecting the first few values. An inspection of the values just computed indicates that

is the solution. Now that we have a candidate solution, we can use induction to try to prove that it is correct.

Induction base: For *n* = 0,

Induction hypothesis: Assume, for an arbitrary positive integer *n*, that

Induction step: We need to show that

If we insert *n* + 1 in the recurrence, we get

This completes the induction proof that our candidate solution *t** _{n}* is correct. Notice that we highlight the terms that are equal by the induction hypothesis. We often do this in induction proofs to show where the induction hypothesis is being applied.

There are two steps in the analysis of a recursive algorithm. The first step is determining the recurrence; the second step is solving it. Our purpose here is to show how to solve recurrences. Determining the recurrences for the recursive algorithms in this text is done when we discuss the algorithms. Therefore, in the remainder of this appendix we do not discuss algorithms; rather, we simply take the recurrences as given. We now present more examples of solving recurrences using induction.

**Example B.1**

Consider the recurrence

The first few values are

It appears that

We use induction to prove that this is correct.

Induction base: For *n* = 1,

Induction hypothesis: Assume, for an arbitrary *n* > 0 and *n* a power of 2, that

Induction step: Because the recurrence is only for powers of 2, the next value to consider after *n* is 2*n*. Therefore, we need to show that

If we insert 2*n* in the recurrence, we get

**Example B.2**

Consider the recurrence

The first few values are

It appears that

We use induction to prove that this is correct.

Induction base: For *n* = 1,

Induction hypothesis: Assume, for an arbitrary *n* > 0 and *n* a power of 2, that

Induction step: We need to show that

If we insert 2*n* in the recurrence, we get

This completes the induction proof. Finally, because

the solution to this recurrence is usually given as

**Example B.3**

Consider the recurrence

The first few values are

There is no obvious candidate solution suggested by these values. As mentioned earlier, induction can only verify that a solution is correct. Because we have no candidate solution, we cannot use induction to solve this recurrence. However, it can be solved using the technique discussed in the next section.

**B.2** Solving Recurrences Using the Characteristic Equation

We develop a technique for determining the solutions to a large class of recurrences.

• B.2.1 Homogeneous Linear Recurrences

**Definition**

A recurrence of the form

where *k* and the *a** _{i}* terms are constants, is called a

*homogeneous linear recurrence equation with constant coefficients.*

Such a recurrence is called “linear” because every term *t** _{i}* appears only to the first power. That is, there are no terms such as

*t*

^{2}*n*

*,*

_{−i}*t*

_{n−i}*t*

*, and so on. However, there is the additional requirement that there be no terms*

_{n−j}*t*

_{c}_{(}

_{n−i}_{)}, where

*c*is a positive constant other than 1. For example, there may not be terms such as

*t*

_{n}_{/2},

*t*

_{3(}

_{n}_{−4)}, etc. Such a recurrence is called “homogeneous” because the linear combination of the terms is equal to 0.

**Example B.4**

The following are homogeneous linear recurrence equations with constant coefficients:

**Example B.5**

The Fibonacci sequence, which is discussed in Subsection 1.2.2, is defined as follows:

If we subtract *t*_{n−}_{1} and *t*_{n−}_{2} from both sides, we get

which shows that the Fibonacci sequence is defined by a homogeneous linear recurrence.

Next we show how to solve a homogeneous linear recurrence.

**Example B.6**

Suppose we have the recurrence

Notice that if we set

then

Therefore, *t** _{n}* =

*r*

**is a solution to the recurrence if**

^{n}*r*is a root of

Because

the roots are *r* = 0, and the roots of

These roots can be found by factoring:

The roots are *r* = 3 and *r* = 2. Therefore,

are all solutions to the recurrence. We verify this for 3**^{n}** by substituting it into the left side of the recurrence, as follows:

With this substitution, the left side becomes

which means that 3**^{n}** is a solution to the recurrence.

We have found three solutions to the recurrence, but we have more solutions, because if 3**^{n}** and 2

**are solutions, then so is**

^{n}where *c*_{1} and *c*_{2} are arbitrary constants. This result is obtained in the exercises. Although we do not show it here, it is possible to show that these are the only solutions. This expression is therefore the general solution to the recurrence. (By taking *c*_{1} = *c*_{2} = 0, the trivial solution *t** _{n}* = 0 is included in this general solution.) We have an infinite number of solutions, but which one is the answer to our problem? This is determined by the initial conditions. Recall that we had the initial conditions

These two conditions determine unique values of *c*_{1} and *c*_{2} as follows. If we apply the general solution to each of them, we get the following two equations in two unknowns:

These two equations simplify to

The solution to this system of equations is *c*_{1} = 1 and *c*_{2} = −1. Therefore, the solution to our recurrence is

If we had different initial conditions in the preceding example, we would get a different solution. A recurrence actually represents a class of functions, one for each different assignment of initial conditions. Let’s see what function we get if we use the initial conditions

with the recurrence given in Example B.6. Applying the general solution in Example B.6 to each of these conditions yields

These two equations simplify to

The solution to this system is *c*_{1} = 0 and *c*_{2} = 1. Therefore, the solution to the recurrence with these initial conditions is

Equation B.1 in Example B.6 is called the characteristic equation for the recurrence. In general, this equation is defined as follows.

**Definition**

The *characteristic equation* for the homogeneous linear recurrence equation with constant coefficients

is defined as

The value of *r*** ^{0}** is simply 1. We write the term as

*r*

**to show the relationship between the characteristic equation and the recurrence.**

^{0}**Example B.7**

The characteristic equation for the recurrence appears below it:

We use an arrow to show that the order of the characteristic equation is *k* (in this case, 2).

The steps used to obtain the solution in Example B.6 can be generalized into a theorem. To solve a homogeneous linear recurrence with constant coefficients, we need only refer to the theorem. The theorem follows, and its proof appears near the end of this appendix.

** Theorem B.1**

Let the homogeneous linear recurrence equation with constant coefficients

be given. If its characteristic equation

has *k* distinct solutions *r*_{1}, *r*_{2},…, *r** _{k}*, then the only solutions to the recurrence are

where the *c** _{i}* terms are arbitrary constants.

The values of the *k* constants *c** _{i}* are determined by the initial conditions. We need

*k*initial conditions to uniquely determine

*k*constants. The method for determining the values of the constants is demonstrated in the following examples.

**Example B.8**

We solve the recurrence

1. Obtain the characteristic equation:

2. Solve the characteristic equation:

The roots are *r* = 4 and *r* = −1.

3. Apply Theorem B.1 to get the general solution to the recurrence:

4. Determine the values of the constants by applying the general solution to the initial conditions:

These values simplify to

The solution to this system is *c*_{1} = 1/5 and *c*_{2} = −1/5.

5. Substitute the constants into the general solution to obtain the particular solution:

**Example B.9**

We solve the recurrence that generates the Fibonacci sequence:

1. Obtain the characteristic equation:

2. Solve the characteristic equation:

From the formula for the solution to a quadratic equation, the roots of this characteristic equation are

3. Apply Theorem B.1 to get the general solution to the recurrence:

4. Determine the values of the constants by applying the general solution to the initial conditions:

These equations simplify to

Solving this system yields *c*_{1} = 1*/√*5 and *c*_{2} = −1*/√*5.

5. Substitute the constants into the general solution to obtain the particular solution:

Although Example B.9 provides an explicit formula for the *n*th Fibonacci term, it has little practical value, because the degree of precision necessary to represent *√*5 increases as *n* increases.

Theorem B.1 requires that all *k* roots of the characteristic equation be distinct. The theorem does not allow a characteristic equation of the following form:

Because the term *r −*2 is raised to the third power, 2 is called a *root of multiplicity 3* of the equation. The following theorem allows for a root to have a multiplicity. The proof of the theorem appears near the end of this appendix.

** Theorem B.2**

Let *r* be a root of multiplicity *m* of the characteristic equation for a homogeneous linear recurrence with constant coefficients. Then

are all solutions to the recurrence. Therefore, a term for each of these solutions is included in the general solution (as given in Theorem B. 1) to the recurrence.

Example applications of this theorem follow.

**Example B.10**

We solve the recurrence

1. Obtain the characteristic equation:

2. Solve the characteristic equation:

The roots are *r* = 1 and *r* = 3, and *r* = 3 is a root of multiplicity 2.

3. Apply Theorem B.2 to get the general solution to the recurrence:

We have included terms for 3**^{n}** and

*n*3

**because 3 is a root of multiplicity 2.**

^{n}4. Determine the values of the constants by applying the general solution to the initial conditions:

These values simplify to

Solving this system yields *c*_{1} = −1, *c*_{2} = 1, and *c*_{3} =

5. Substitute the constants into the general solution to obtain the particular solution:

**Example B.11**

We solve the recurrence

1. Obtain the characteristic equation:

2. Solve the characteristic equation:

The roots are *r* = 3 and *r* = 1, and the root 1 has multiplicity 2.

3. Apply Theorem B.2 to obtain the general solution to the recurrence:

4. Determine the values of the constants by applying the general solution to the initial conditions:

These equations simplify to

Solving this system yields *c*_{1} = 0, *c*_{2} = 1, and *c*_{3} = 1.

5. Substitute the constants into the general solution to obtain the particular solution:

• B.2.2 Nonhomogeneous Linear Recurrences

**Definition**

A recurrence of the form

where *k* and the *a** _{i}* terms are constants and

*f*(

*n*) is a function other than the zero function, is called a

*nonhomogeneous linear recurrence equation with constant coefficients.*

By the zero function, we mean the function *f*(*n*) = 0. If we used the zero function, we would have a homogeneous linear recurrence equation. There is no known general method for solving a nonhomogeneous linear recurrence equation. We develop a method for solving the common special case

where *b* is a constant and *p* (*n*) is a polynomial in *n*.

**Example B.12**

The recurrence

is an example of Recurrence B.2 in which *k* = 1, *b* = 4, and *p* (*n*) = 1.

**Example B.13**

The recurrence

is an example of Recurrence B.2 in which *k* = 1, *b* = 4, and *p* (*n*) = 8*n* + 7.

The special case shown in Recurrence B.2 can be solved by transforming it into a homogeneous linear recurrence. The next sample illustrates how this is done.

**Example B.14**

We solve the recurrence

The recurrence is not homogeneous because of the term 4**^{n}** on the right. We can get rid of that term as follows:

1. Replace *n* with *n −* 1 in the original recurrence so that the recurrence is expressed with 4**^{n−}^{1}** on the right:

2. Divide the original recurrence by 4 so that the recurrence is expressed in another way with 4**^{n−}^{1}** on the right:

3. Our original recurrence must have the same solutions as these versions of it. Therefore, it must also have the same solutions as their difference. This means we can get rid of the term 4**^{n−}^{1}** by subtracting the recurrence obtained in Step 1 from the recurrence obtained in Step 2. The result is

We can multiply by 4 to get rid of the fractions:

This is a homogeneous linear recurrence equation, which means that it can be solved by applying Theorem B.1. That is, we solve the characteristic equation

obtain the general solution

and use the initial conditions *t*_{0} = 0 and *t*_{1} = 4 to determine the particular solution:

In Example B.14, the general solution has the terms

The first term comes from the characteristic equation that would be obtained if the recurrence were homogeneous, whereas the second term comes from the nonhomogeneous part of the recurrence—namely, *b*. The polynomial *p* (*n*) in this example equals 1. When this is not the case, the manipulations necessary to transform the recurrence into a homogeneous one are more complex. However, the outcome is simply to give *b* a multiplicity in the characteristic equation for the resultant homogeneous linear recurrence. This result is given in the theorem that follows. The theorem is stated without proof. The proof would follow steps similar to those in Example B.14.

** Theorem B.3**

A nonhomogeneous linear recurrence of the form

can be transformed into a homogeneous linear recurrence that has the characteristic equation

where *d* is the degree of *p* (*n*). Notice that the characteristic equation is composed of two parts:

1. The characteristic equation for the corresponding homogeneous recurrence

2. A term obtained from the nonhomogeneous part of the recurrence

If there is more than one term like *b*^{n}*p* (*n*) on the right side, each one contributes a term to the characteristic equation.

Before applying this theorem, we recall that the degree of a polynomial *p* (*n*) is the highest power of *n*. For example,

Now let’s apply Theorem B.3.

**Example B.15**

solve the recurrence

1. Obtain the characteristic equation for the corresponding homogeneous equation:

2. Obtain a term from the nonhomogeneous part of the recurrence:

The term from the nonhomogeneous part is

3. Apply Theorem B.3 to obtain the characteristic equation from the terms obtained in Steps 1 and 2. The characteristic equation is

After obtaining the characteristic equation, proceed exactly as in the linear homogeneous case:

4. Solve the characteristic equation:

The roots are *r* = 3 and *r* = 4, and the root *r* = 4 has multiplicity 2.

5. Apply Theorem B.2 to get the general solution to the recurrence:

We have three unknowns, but only two initial conditions. In this case, we must find another initial condition by computing the value of the recurrence at the next-largest value of *n*. In this case, that value is 2. Because

and *t*_{1} = 12,

In the exercises you are asked to (6) determine the values of the constants and (7) substitute the constants into the general solution to obtain

**Example B.16**

We solve the recurrence

1. Obtain the characteristic equation for the corresponding homogeneous recurrence:

2. Obtain a term from the nonhomogeneous part of the recurrence:

The term is

3. Apply Theorem B.3 to obtain the characteristic equation from the terms obtained in Steps 1 and 2. The characteristic equation is

4. Solve the characteristic equation:

The root is *r* = 1, and it has a multiplicity of 3.

5. Apply Theorem B.2 to get the general solution to the recurrence:

We need two more initial conditions:

In the exercises you are asked to (6) determine the values of the constants and (7) substitute the constants into the general solution to obtain

**Example B.17**

We solve the recurrence

1. Determine the characteristic equation for the corresponding homogeneous recurrence:

2. This is a case in which there are two terms on the right. As Theorem B.3 states, each term contributes to the characteristic equation, as follows:

The two terms are

3. Apply Theorem B.3 to obtain the characteristic equation from all the terms:

You are asked to complete this problem in the exercises.

• B.2.3 Change of Variables (Domain Transformations)

Sometimes a recurrence that is not in the form that can be solved by applying Theorem B.3 can be solved by performing a change of variables to transform it into a new recurrence that is in that form. The technique is illustrated in the following examples. In these examples, we use *T* (*n*) for the original recurrence, because *t** _{k}* is used for the new recurrence. The notation

*T*(

*n*) means the same things as

*t*

*—namely, that a unique number is associated with each value of*

_{n}*n*.

**Example B.18**

We solve the recurrence

Recall that we already solved this recurrence using induction in Section B.1. We solve it again to illustrate the *change of variables* technique. The recurrence is not in the form that can be solved by applying Theorem B.3 because of the term *n/*2. We can transform it into a recurrence that is in that form as follows. First, set

Second, substitute 2**^{k}** for

*n*in the recurrence to obtain

Next, set

in Recurrence B.3 to obtain the new recurrence,

This new recurrence is in the form that can be solved by applying Theorem B.3. Therefore, applying that theorem, we can determine its general solution to be

The general solution to our original recurrence can now be obtained with the following two steps:

1. Substitute *T*(2* ^{k}*) for

*t*

*in the general solution to the new recurrence:*

_{k}2. Substitute *n* for 2**^{k}** and lg

*n*for

*k*in the equation obtained in Step 1:

Once we have the general solution to our original recurrence, we proceed as usual. That is, we use the initial condition *T* (1) = 1, determine a second initial condition, and then compute the values of the constants to obtain

**Example B.19**

We solve the recurrence

Recall that we were unable to solve this recurrence using induction in Example B.3. We solve it here with a change of variables. First, substitute 2**^{k}** for

*n*to yield

Next, set

in this equation to obtain

Apply Theorem B.3 to this new recurrence to obtain

Perform the steps that give the general solution to the original recurrence:

1. Substitute *T* (2**^{k}**) for

*t*

*in the general solution to the new recurrence:*

_{k}2. Substitute *n* for 2**^{k}** and lg

*n*for

*k*in the equation obtained in Step 1:

Now proceed as usual. That is, use the initial condition *T* (1) = 0, determine two more initial conditions, and then compute the values of the constants. The solution is

**Example B.20**

We solve the recurrence

Substitute 2**^{k}** for

*n*in the recurrence to yield

Set

in Recurrence (B.4) to obtain

This recurrence does not look exactly like the kind required in Theorem B.3, but we can make it look like that as follows:

Now apply Theorem B.3 to this new recurrence to obtain

Perform the steps that give the general solution to the original recurrence:

1. Substitute *T* (2**^{k}**) for

*t*

*in the general solution to*

_{k}*t*

*:*

_{k}2. Substitute *n* for 2**^{k}** and lg

*n*for

*k*in the equation obtained in Step 1:

Use the initial condition *T* (1) = 0, determine a second initial condition, and then compute the values of the constants. The solution is

**B.3** Solving Recurrences by Substitution

Sometimes a recurrence can be solved using a technique called *substitution.* You can try this method if you cannot obtain a solution using the methods in the last two sections. The following examples illustrate the substitution method.

**Example B.21**

We solve the recurrence

In a sense, substitution is the opposite of induction. That is, we start at *n* and work backward:

We then substitute each equality into the previous one, as follows:

The last equality is the result in Example A.1 in Appendix A.

The recurrence in Example B.21 could be solved using the characteristic equation. The recurrence in the following example cannot.

**Example B.22**

We solve the recurrence

First, work backward from *n*:

Then substitute each equation into the previous one:

for *n* not small. The approximate equality is obtained from Example A.9 in Appendix A.

**B.4** Extending Results for *n*, a Power of a Positive Constant *b*, to *n* in General

It is assumed in the material that follows that you are familiar with the material in Chapter 1.

In the case of some recursive algorithms, we can readily determine the exact time complexity only when *n* is a power of some base *b*, where *b* is a positive constant. Often the base *b* is 2. This is true in particular for many divide-and-conquer algorithms (see Chapter 2). Intuitively, it seems that a result that holds for *n* a power of *b* should approximately hold for *n* in general. For example, if for some algorithm we establish that

for *n* a power of 2, it seems that for *n* in general we should be able to conclude that

It turns out that usually we can draw such a conclusion. Next we discuss situations in which this is the case. First we need some definitions. These definitions apply to arbitrary functions whose domains and ranges are any subsets of the real numbers, but we state them for complexity functions (that is, functions that map the positive integers to the positive reals) because these are the functions that interest us here.

**Definition**

A complexity function *f*(*n*) is called *strictly increasing* if *f*(*n*) always gets larger as *n* gets larger. That is, if *n*_{1} > *n*_{2}, then

The function shown in Figure B.1(a) is strictly increasing. (For clarity, the domains of the functions in Figure B.1 are all the nonnegative reals.) Many of the functions we encounter in algorithm analysis are strictly increasing for nonnegative values of *n*. For example, lg *n*, *n*, *n* lg *n*, *n*** ^{2}**, and 2

**are all strictly increasing as long as**

^{n}*n*is nonnegative.

**Definition**

A complexity function *f*(*n*) is called *nondecreasing* if *f*(*n*) never gets smaller as *n* gets larger. That is, if *n*_{1} > *n*_{2}, then

**Figure B.1** Four functions.

Any strictly increasing function is nondecreasing, but a function that can level out is nondecreasing without being strictly increasing. The function shown in Figure B.1(b) is an example of such a function. The function in Figure B.1(c) is not nondecreasing.

The time (or memory) complexities of most algorithms are ordinarily nondecreasing because the time it takes to process an input usually does not decrease as the input size becomes larger. Looking at Figure B.1, it seems that we should be able to extend an analysis for *n* a power of *b* to *n* in general as long as the function is nondecreasing. For example, suppose we have determined the values of *f*(*n*) for *n* a power of 2. In the case of the function in Figure B.1(c), anything can happen between, say, 2** ^{3}** = 8 and 2

**= 16. Therefore, nothing can be concluded about the behavior of the function between 8 and 16 from the values at 8 and 16. However, in the case of a nondecreasing function**

^{4}*f*(

*n*), if 8

*≤ n ≤*16 then

So it seems that we should be able to determine the order of *f*(*n*) from the values of *f*(*n*) for *n* a power of 2. What seems to be true intuitively can indeed be proven for a large class of functions. Before giving a theorem stating this, we recall that order has to do only with long-range behavior. Because initial values of a function are unimportant, the theorem requires only that the function be eventually nondecreasing. We have the following definition:

**Definition**

A complexity function *f*(*n*) is called *eventually nondecreasing* if for all *n* past some point the function never gets smaller as *n* gets larger. That is, there exists an *N* such that if *n*_{1} > *n*_{2} > *N*, then

Any nondecreasing function is eventually nondecreasing. The function shown in Figure 3.1(d) is an example of an eventually nondecreasing function that is not nondecreasing. We need the following definition before we give the theorem for extending the results for *n* a power of *b*:

**Definition**

A complexity function *f*(*n*) is called *smooth* if *f*(*n*) is eventually nondecreasing and if

**Example B.23**

The functions lg *n*, *n*, *n* lg *n*, and *n***^{k}**, where

*k*≥ 0, are all smooth. We show this for lg

*n*. In the exercises you are asked to show it for the other functions. We have already noted that lg

*n*is eventually nondecreasing. As to the second condition, we have

**Example B.24**

The function 2**^{n}** is not smooth, because the Properties of Order in Section 1.4.2 in Chapter 1 imply that

Therefore,

We now state the theorem that enables us to generalize results obtained for *n* a power of *b*. The proof appears near the end of this appendix.

** Theorem B.4**

Let *b* ≥ 2 be an integer, let *f*(*n*) be a smooth complexity function, and let *T* (*n*) be an eventually nondecreasing complexity function. If

then

Furthermore, the same implication holds if Θ is replaced by “big *O*,” Ω, or “small *o*.”

By “*T* (*n*) Θ(*f*(*n*)) for *n* a power of *b*,” we mean that the usual conditions for Θ are known to hold when *n* is restricted to being a power of *b*. Notice in Theorem B.4 the additional requirement that *f*(*n*) be smooth.

Next we apply Theorem B.4

** Example B.25**

Suppose for some complexity function we establish that

When *n* is a power of 2, we have the recurrence in Example B.18. Therefore, by that example,

Because lg *n* is smooth, we need only show that *T* (*n*) is eventually nonde-creasing in order to apply Theorem B.4 to conclude that

One might be tempted to conclude that *T* (*n*) is eventually nondecreasing from the fact that lg *n* + 1 is eventually nondecreasing. However, we cannot do this because we know only that *T* (*n*) = lg *n* + 1 when *n* is a power of 2. Given only this fact, *T* (*n*) could exhibit any possible behavior in between powers of 2.

We show that *T* (*n*) is eventually nondecreasing by using induction to establish for *n* ≥ 2 that if 1 *≤ k* < *n*, then

Induction base: For *n* = 2,

Therefore,

Induction hypothesis: One way to make the induction hypothesis is to assume that the statement is true for all *m ≤ n*. Then, as usual, we show that it is true for *n* + 1. This is the way we need it to be stated here. Let *n* be an arbitrary integer greater than or equal to 2. Assume for all *m ≤ n* that if *k* <*m*, then

Induction step: Because in the induction hypothesis we assumed for *k* < *n* that

we need only show that

To that end, it is not hard to see that if *n* ≥ 1, then

Therefore, by the induction hypothesis,

Using the recurrence, we have

and we are done.

Finally, we develop a general method for determining the order of some common recurrences.

** Theorem B.5**

Suppose a complexity function *T* (*n*) is eventually nondecreasing and satisfies

where *b* ≥ 2 and *k* ≥ 0 are constant integers, and *a*, *c*, and *d* are constants such that *a* > 0, *c* > 0, and *d* ≥ 0. Then

Furthermore, if, in the statement of the recurrence,

is replaced by

then Result B.5 holds with “big *O*” or Ω, respectively, replacing Θ.

We can prove this theorem by solving the general recurrence using the characteristic equation and then applying Theorem B.4. Example applications of Theorem B.5 follow.

**Example B.26**

Suppose that *T* (*n*) is eventually nondecreasing and satisfies

By Theorem B.5, because 8 < 4** ^{2}**,

**Example B.27**

Suppose that *T* (*n*) is eventually nondecreasing and satisfies

By Theorem B.5, because 9 > 3** ^{1}**,

Theorem B.5 was stated in order to introduce an important theorem as simply as possible. It is actually the special case, in which the constant *s* equals 1, of the following theorem.

** Theorem B.6**

Suppose that a complexity function *T* (*n*) is eventually nondecreasing and satisfies

where *s* is a constant that is a power of *b*, *b* ≥ 2 and *k* ≥ 0 are constant integers, and *a*, *c*, and *d* are constants such that *a* > 0, *c* > 0, and *d* ≥ 0. Then the results in Theorem B.5 still hold.

**Example B.28**

Suppose that *T* (*n*) is eventually nondecreasing and satisfies

By Theorem B.6, because 8 = 2** ^{3}**,

This concludes our discussion of techniques for solving recurrences. Another technique is to use “generating functions” to solve recurrences. This technique is discussed in Sahni (1988). Bentley, Haken, and Sax (1980) provide a general method for solving recurrences arising from the analysis of divide-and-conquer algorithms (see Chapter 2).

**B.5** Proofs of Theorems

The following lemma is needed to prove Theorem B.1.

** Lemma B.1**

Suppose we have the homogeneous linear recurrence

If *r*_{1} is a root of the characteristic equation

then

is a solution to the recurrence.

Proof: If, for *i* = *n − k,.*.., *n*, we substitute *r*^{i}_{1} for *t** _{i}* in the recurrence, we obtain

Therefore, *r*_{1}* ^{n}* is a solution to the recurrence.

Proof of Theorem B.1 It is not hard to see that, for a linear homogeneous recurrence, a constant times any solution and the sum of any two solutions are each solutions to the recurrence. We can therefore apply Lemma B.1 to conclude that, if

are the *k* distinct roots of the characteristic equation, then

where the *c** _{i}* terms are arbitrary constants, is a solution to the recurrence. Although we do not show it here, one can prove that these are the only solutions.

Proof of Theorem B.2 We prove the case where the multiplicity *m* equals 2. The case of a larger *m* is a straightforward generalization. Let *r*_{1} be a root of multiplicity 2. Set

where *q*′ (*r*) means the first derivative. If we substitute for *t** _{i}* in the recurrence, we obtain

*u*(

*r*

_{1}). Therefore, if we can show that

*u*(

*r*

_{1}) = 0, we can conclude that is a solution to the recurrence, and we are done. To this end, we have

Therefore, to show that *u* (*r*_{1}) = 0, we need only show that *p* (*r*_{1}) and *p*′ (*r*_{1}) both equal 0. We show this as follows. Because *r*_{1} is a solution of multiplicity 2 of the characteristic equation *p* (*r*), there exists a *v* (*r*) such that

Therefore,

and *p* (*r*_{1}) and *p*′ (*r*_{1}) both equal 0. This completes the proof.

Proof of Theorem B.4 We obtain the proof for “big *O*.” Proofs for Ω and Θ can be established in a similar manner. Because *T* (*n*) *O* (*f*(*n*)) for all *n* such that *n* is a power of *b*, there exist a positive *c*_{1} and a nonnegative integer *N*_{1} such that, for *n* > *N*_{1} and *n* a power of *b*,

For any positive integer *n*, there exists a unique *k* such that

It is possible to show, in the case of a smooth function, that, if *b* ≥ 2, then

That is, if this condition holds for 2, it holds for any *b* > 2. Therefore, there exist a positive constant *c*_{2} and a nonnegative integer *N*_{2} such that, for *n* > *N*_{2},

Therefore, if *b*^{k}*≥ N*_{2},

Because *T* (*n*) and *f*(*n*) are both eventually nondecreasing, there exists an *N*_{3}, such that, for *m* > *n* > *N*_{3},

Let *r* be so large that

If *n* > *b***^{r}** and

*k*is the value corresponding to

*n*in Inequality B.7, then

Therefore, by Inequalities B.6, B.7, B.8, and B.9, for *n* > *b***^{r}**,

which means that

**EXERCISES**

Section B.1

1. Use induction to verify the candidate solution to each of the following recurrence equations.

(a) *t** _{n}* = 4

*t*

_{n−}_{1}for

*n*> 1

*t*

_{1}= 3

The candidate solution is *t** _{n}* = 3 (4

**).**

^{n−}^{1}(b) *t** _{n}* =

*t*

_{n−}_{1}+ 5 for

*n*> 1

*t*

_{1}= 2

The candidate solution is *t** _{n}* = 5

*n −*3.

(c) *t** _{n}* =

*t*

_{n−}_{1}+

*n*for

*n*> 1

*t*

_{1}= 1

The candidate solution is

(d) *t** _{n}* =

*t*

_{n−}_{1}+

*n*

**for**

^{2}*n*> 1

*t*

_{1}= 1

The candidate solution is

(e)

The candidate solution is

(f) *t** _{n}* = 3

*t*

_{n−}_{1}+ 2

**for**

^{n}*n*> 1

*t*

_{1}= 1

The candidate solution is

(g)

The candidate solution is *t** _{n}* =

^{5}(h) *t** _{n}* =

*nt*

_{n−}_{1}for

*n*> 0

*t*

_{0}= 1

The candidate solution is *t** _{n}* =

*n*!.

2. Write a recurrence equation for the *n*th term of the sequence 2, 6, 18, 54,.*..,* and use induction to verify the candidate solution *s** _{n}* = 2 (3

^{n−}^{1)}3. The number of moves (*m** _{n}* for

*n*rings) needed in the Towers of Hanoi problem (see Exercise 17 in Chapter 2) is given by the following recurrence equation

Use induction to show that the solution to this recurrence equation is *m** _{n}* = 2

**− 1.**

^{n}4. The following algorithm returns the position of the largest element in the array *S*. Write a recurrence equation for the number of comparisons *t** _{n}* needed to find the largest element. Use induction to show that the equation has the solution

*t*

*=*

_{n}*n −*1.

The top-level call is

*max position* (1, *n*).

5. The ancient Greeks were very interested in sequences resulting from geometric shapes such as the following triangular numbers:

Write a recurrence equation for the *n*th term in this sequence, guess a solution, and use induction to verify your solution.

6. Into how many regions do *n* lines divide a plane so that every pair of lines intersect, but no more than two lines intersect at a common point? Write a recurrence equation for the number of regions for *n* lines, guess a solution for your equation, and use induction to verify your solution.

7. Show that is the solution to the following recurrence equation:

8. Write and implement an algorithm that computes the value of the following recurrence, and run it using different problem instances. Use the results to guess a solution for this recurrence, and use induction to verify your solution.

Section B.2

9. Indicate which recurrence equations in the problems for Section B.1 fall into each of the following categories.

(a) Linear equations

(b) Homogeneous equations

(c) Equations with constant coefficients

10. Find the characteristic equations for all of the recurrence equations in Section B.1 that are linear with constant coefficients.

11. Show that if *f*(*n*) and *g* (*n*) are both solutions to a linear homogeneous recurrence equation with constant coefficients, then so is *c × f*(*n*) + *d* × *g*(*n*), where *c* and *d* are constants.

12. Solve the following recurrence equations using the characteristic equation.

13. Complete the solution to the recurrence equation given in Example B.15.

14. Complete the solution to the recurrence equation given in Example B.16.

15. Solve the following recurrence equations using the characteristic equation.

16. Complete the solution to the recurrence equation given in Example B. 17.

17. Show that the recurrence equation

can be written as

18. Solve the recurrence equation in Exercise 17. The solution gives the number of derangements (nothing is in its right place) of *n* objects.

19. Solve the following recurrence equations using the characteristic equation.

Section B.3

20. Solve the recurrence equations in Exercise 1 using the substitution method.

Section B.4

21. Show that

(a) *f*(*n*) = *n*** ^{3}** is a strictly increasing function.

(b) *g* (*n*) = 2*n*** ^{3}** − 6

*n*

**is an eventually nondecreasing function.**

^{2}22. What can we say about a function *f*(*n*) that is both nondecreasing and nonincreasing for all values of *n*?

23. Show that the following functions are smooth.

(a) *f*(*n*) = *n* lg *n*

(b) *g* (*n*) = *n***^{k}**, for all

*k*≥ 0.

24. Assuming in each case that *T* (*n*) is eventually nondecreasing, use Theorem B.5 to determine the order of the following recurrence equations.

25. Assuming in each case that *T* (*n*) is eventually nondecreasing, use Theorem B.6 to determine the order of the following recurrence equations:

26. We know that the recurrence

has solution

in the case *a* > *c*, provided that *g* (*n*) Θ(*n*). Prove that the recurrence has the same solution if we assume that