213 tayangan

Diunggah oleh ravg10

- 2007 IscTheory Repeat
- cs225_hw0
- Structural Tips for Writing Technical Papers
- MSC-021 Block-1.pdf
- MCS-031 june 2012
- 2.4. an Anagram Detection Example — Problem Solving With Algorithms and Data Structures
- Hopcroft-original-CS-TR-71-190
- _11 - Big O and Recursion
- 130430121134
- Infinite Resistor Chain
- Backtracking
- Php Database
- L00 Introduction Eng [Algorithms]
- PS2 - DS102 with Solution.docx
- Analysis
- CS353 10 Backtracking
- branson linear recursion task
- en-2001-ioi-vzo
- 4.Design Analysis of Algorithm QB
- Induction

Anda di halaman 1dari 4

Fibonacci Numbers and Binomial Coefficients

Ivan Stojmenovic

Abstract—We observe that the computational inefficiency of in the textbooks make two calls to themselves, and may be

branched recursive functions was not appropriately covered in referred to as examples of double recursion. The recursion

almost all textbooks for computer science courses in the first three tree of a double recursive function is a binary one. There are

years of the curriculum. Fibonacci numbers and binomial coef-

ficients were frequently used as examples of branched recursive applications of double recursion which produce optimal (up to

functions. However, their exponential time complexity was rarely constant) solutions. Typical examples are the preorder, inorder

claimed and never completely proved in the textbooks. Alternative and postorder traversals of a binary tree, which are simple

linear time iterative solutions were rarely mentioned. We give very recursive functions used in any data structure course. Their

simple proofs that these recursive functions have exponential time time complexity is proportional to the size of a traversed tree.

complexity. The proofs are appropriate for coverage in the first

computer science course. Another famous example is the towers of Hanoi problem, which

has simple but exponential time recursive solution, which is

Index Terms—Binomial coefficients, computer science, Fi- optimal due to the nature of the problem. It is well known

bonacci numbers, recursion.

that any recursive function can be rewritten to produce an

equivalent iterative implementation, using stack data structure

I. INTRODUCTION and a scheme that is straightforward but is difficult to grasp

and apply. The corresponding iterative solution, produced by

R ECURSION is an important problem solving and pro-

gramming technique and there is no doubt that it should

be covered in the first year introductory computer science

the scheme, has equal time complexity. An iterative solution,

often more elegant than the recursive one, can be produced for

courses, in the second year data structure course, and in the a given problem directly, without the scheme. For example, [1]

third year design and analysis of algorithms course. While the gave a surprisingly simple iterative algorithm for the towers

advantages of using recursion are well taught and discussed of Hanoi problem.

in textbooks, we discovered that its potential pitfalls are often Most textbooks use, however, Fibonacci numbers or bino-

neglected and never fully discussed in literature. mial coefficients as the first examples of branched recursive

For the purpose of our discussion, we shall divide recursive functions, in the first year computer science courses. These ex-

functions into linear and branched ones. Linear recursive func- amples often appear as apparently recommended programs in

tions make only one recursive call to itself. Note that a func- some textbooks, as observed in [2]. Although most textbooks

tion’s making only one recursive call to itself is not at all the mention the inefficiency of these solutions, the degree of inef-

same as having the recursive call made one place in the func- ficiency is rarely discussed and never fully proved. Only a few

tion, since this place might be inside a loop. It is also possible textbooks include alternative linear time (for Fibonacci num-

to have two places that issue a recursive call (such as both the bers) or quadratic time (for binomial coefficients) algorithms.

then and else clauses of an if statement) where only one call In the next section we shall review some recent textbooks for

can actually occur. The recursion tree of a linear recursive func- first, second and third year computer science courses regarding

tion has a very simple form of a chain, where each vertex has branched recursive functions and their iterative counterparts. In

only one child. This child corresponds to the single recursive Section III we give a simple proof that the recursive algorithm for

call that occurs. Such a simple tree is easy to comprehend, such computing Fibonacci numbers has exponential time complexity.

as in the well known factorial function. By reading the recursion A similar proof for recursive binomial coefficient computation

tree from bottom to top, we immediately obtain the iterative pro- is given in Section IV. All proofs are appropriate for the

gram for the recursive one. Thus the transformation from linear students in first computer science courses. They were taught

recursion to iteration is easy, and will likely save both space and successfully by the author at the University of Ottawa for

time. However, these savings are only in the constant of linear five consecutive years. We conclude that recursion should

time complexity for both recursive and iterative solutions, and be covered completely, including drawbacks in addition to

can be easily disregarded. advantages. It may be covered as a problem solving technique in

Branched recursive functions make more than one call to the first computer science course. In our judgement, recursion

themselves. All examples of branched recursive functions seen as a programming technique should be taught after iterative

algorithms are sufficiently exercised (in the later part of the

first course or at the beginning of the second one). The

Manuscript received January 11, 1999; revised November 22, 1999. success of actual programming exercises may depend on the

The authors are with the Department of Computer Science, University of Ot-

tawa, Ottawa, ON K1N 6N5, Canada (e-mail: ivan@site.uottawa.ca. accumulated programming skills and prior mastering of stacks

Publisher Item Identifier S 0018-9359(00)03986-8. as data structures.

0018–9359/00$10.00 © 2000 IEEE

274 IEEE TRANSACTIONS ON EDUCATION, VOL. 43, NO. 3, AUGUST 2000

Fibonacci numbers are defined as follows: tion of the Fibonacci function.” The degree of inefficiency is not

elaborated. Maximal element in a list has been computed in [8]

for and by using “double” recursion, and its inefficiency was discussed.

and However, exponential time complexity was not mentioned. Fi-

for nally, [2] offers a good discussion about linear and branched

recursion. “A far more wasteful example than factorials is the

Thus, the sequence is 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, computation of the Fibonacci numbers. This example is not

377, 610, 987, 1597, 2584, . “divide-and-conquer” but “divide-and-complicate.” It turns out

The well-known recursive algorithms for computing can that the amount of time used by the recursive function to cal-

be written as follows: culate grows exponentially with [2]. However, [2] stops

short on proving the statement. The same book also observes

f (n): that the recursion tree for calculating Fibonacci numbers is not

if n = 1 or n = 2 then the answer is 1; a chain, but contains a great many vertices signifying duplicate

if n > 2 then f

compute F N 1 = f (n 0 1); tasks. When a recursive program is run, it sets up a stack to use

compute F N 2 = f (n 2); 0 while traversing the tree, but if the results stored in the stack are

the answer is F N 1 + F N 2 . g discarded rather than kept in some other data structure for future

use, then a great deal of duplication of work may occur, as in the

Binomial coefficient ( chooses ) can be recursively recursive calculation of Fibonacci numbers [2]. In such cases, it

computed as follows (assume that and are nonnegative in- is preferable to substitute another data structure for the stack,

tegers): one that allows references to locations other than the top. For

the Fibonacci numbers only two additional temporary variables

were needed to hold the information required for calculating the

C (n; k ):

current number [2].

if k > n then the answer is 0;

The third year textbook on the design and analysis of algo-

if k = 0 or =

then the answer is 1;

k n

then compute C n1k = C (n 01 ; k) ;

rithms were expected to provide full answer about branched re-

compute C n1k 1 = C (n 1; k 1); 0 0 cursive functions. The textbook [9] derives using a sophis-

the answer is C n1k + C n1k 1 . g ticated argument involving calculus and quadratic functions. For

the recursive solution, [9] notes that “this is a bad way to com-

pute the Fibonacci numbers since many numbers will be com-

Binomial coefficients form Pascal’s triangle as fol- puted many times. How much work does the recursive algorithm

lows (each entry is the sum of the 2 entries above it, one directly do? This is a surprisingly difficult question, considering how

above it, and the other to the left): simple the algorithm is” [9]. The exponential time complexity

was not mentioned. In the next section, a very simple proof that

the amount of work is exponential shall be provided. The fol-

lowing linear time algorithm for computing was given in

[9] (the algorithm computes by using only four vari-

ables):

f n2 := 1; f n1 := 1;

for i := 3 to n do f fn := f n2 + f n1 ;

f n2 := f n1 ;

II. REVIEW OF TEXTBOOKS

f n1 := fn g.

We reviewed three recent textbooks for introductory first year

computer science courses. The textbook [3] presents the recur- The textbook [10] explains how to compute in

sive Fibonacci numbers function, without mentioning its ineffi- time by using a matrix. It offers an exercise to readers to

ciency. Similarly, the textbook [4] describes the recursive com- show themselves that the recursive computation of takes

putation of “ choose ,” again without discussing its ineffi- exponential time, and to find an iterative linear time solution. A

ciency. Finally, the textbook [5] observes that “although easy to few textbooks, not cited below, did not discuss recursive algo-

write, the Fibonacci function is not very efficient, because each rithms at all. Finally, textbook [11] presents a linear time algo-

recursive step generates two calls to function Fibonacci.” No rithm for computing by using arrays, as follows”

further explanations were offered.

We also reviewed four second year textbooks in data struc-

f [1] := 1; f [2] := 1;

tures. The textbook [6] does not have examples of inefficient

recursive calls and does not discuss possible recursion ineffi- for i := 3 to n do f [i ] := f [i 0 1] + f [i 0 2].

ciency. The textbook [7] repeats the statement from [5] and con-

tinues by noting that the “recursive Fibonacci function repeats In addition to being linear, the algorithm calculates for

the same calculation several times during the evaluation of the all values of , while the corresponding recur-

expression. This does not happen in an iterative implementa- sive algorithms returns only . The same book also makes

STOJMENOVIC: RECURSIVE ALGORITHMS IN COMPUTER SCIENCE COURSES 275

used as a basis for yet another iterative algorithm). The proof

can be understood (with difficulties, according to personal ex-

perience) by first year students. For a large

Here a much simpler proof that is exponential in is

given. Observe that

a step toward providing a full answer by observing that the . Thus

‘exact number of calls on the procedure Fibonacci is equal to

the number of calls to compute plus the number of for . If

calls to compute , that is exactly ’. The statement is even stop at ; otherwise stop at . In

is not formally proven and is somewhat imprecise, as discussed both cases where the division is integer division

below. Moreover, the size of is not discussed. (that is, the ratio is truncated). Since

is obtained. Therefore is exponential in .

III. FIBONACCI NUMBERS

IV. BINOMIAL COEFFICIENTS

Fig. 1 shows the execution tree for computing

by using a recursive algorithm. The execution tree is a binary We did not find the iterative algorithm for computing bino-

tree. The order of execution (recursive calls) follows the outer mial coefficients in the textbook reviewed, but believe that it is

boundary of the execution tree and makes a cycle with input well known. The rows of Pascal’s triangle can be found

and output , as indicated by arrows (more iteratively if is treated as a two-dimensional array (ma-

precisely, the order of the execution is the preorder traversal of trix) as follows:

the execution tree). Repeated computations of and

are easily observed. The main observation is that the re-

cursive calls stop when the corresponding value for Fibonacci

f

for i := 0 to m do C [i; 0] := 1; C [i; i] := 1 ; g

for n := 2 to m do

number (that is, or ) becomes equal to 1. These 1’s

for k := 1 to n 1 do 0

are at the leaves of the execution tree. How many 1’s are at the

bottom of the execution tree, that is at its leaves? The answer

C [n; k ] := C [n01 ; k ] + C [n 0

1; k 0

1];

when the value drops to 1, and thus is actually computed The second for loop is iterated approximately times, each

as . Therefore the recursive solution must time with approximately iterations of the internal nested for

“decompose” into 1’s and sum them up! loop. Since , the time complexity is proportional to

With this observation, it is easy to see that the recursive so- . More precisely, the solution requires about additions

lution needs times to apply the summation (operation and is therefore quadratic. Note that each is computed

“ ”) in order to compute . Again, this is because is only once in the algorithm, and that all of them are computed,

computed as the sum of 1’s only! The number of recursive calls while the recursive algorithm returns only one requested value

is also , since each such recursive call can be paired .

with a “ ” operation (here, the leaves are not counted as pro- Consider now the time complexity of the recursive algorithm

ducing recursive calls; otherwise the answer is ). Note for computing binomial coefficients. Fig. 2 illustrates the exe-

that the proof can be easily presented even without the execu- cution tree for computing . One can again observe

tion tree; that is, it is appropriate for the first computer science that recursive calls stop when the value of the binomial coef-

course that typically does not cover the notion of trees. ficient drops to 1, and that has been decomposed as

An alternate proof may be given as an exercise for mathemat- . Therefore there are leaves

ical induction. The base case is true (i.e. and ). In the at the bottom of the execution tree, and the recursive algorithm

inductive step, one can observe that, since the computation of makes additions to compute . To prove that

recursively compute and , the number the algorithm has exponential time complexity, one should show

of recursive calls is . that is exponential in size. This is not always true, but

The exponential time complexity can only be argued if is true when is approximately . This can be proven in an

is proven to be a number that is exponential in . The proofs in elegant way as follows. It is well known that can be

literature refer to the exact formula for expressed as follows (the expression can be used as a basis for

another iterative algorithm):

276 IEEE TRANSACTIONS ON EDUCATION, VOL. 43, NO. 3, AUGUST 2000

tions to Fibonacci number and binomial coefficients problems.

It may not apply if a linear recursive function for any of them

is described. However, the author believes that the problem is

fundamental, meaning that there is no general scheme for con-

verting inefficient branched recursive functions into efficient

linear recursive ones. This will remain a problem for future

Fig. 2. Execution tree for computing C (4; 2). study.

REFERENCES

We shall prove that

[1] F. B. Chedid and T. Mogi, “A simple iterative algorithm for the towers

. One can show that of Hanoi problem,” IEEE Trans. Educ., vol. 39, pp. 274–275, May 1996.

whenever (this is equivalent to , i.e. [2] R. L. Kruse, C. L. Tondo, and B. P. Leung, Data Structures and Program

, that is ). This suffices for our claim. Thus Design in C. Englewood Cliffs, NJ: Prentice-Hall, 1997.

[3] A. B. Tucker, A. P. Bernat, W. J. Bradley, R. B. Cupper, and G. W.

. For this implies , Scragg, Fundamentals of Computing I. New York: McGraw-Hill,

which is exponential in . 1994.

[4] T. L. Naps and D. W. Nance, Introduction to Computer Science: Pro-

gramming, Problem Solving, and Data Structures. St. Paul, MN: West,

V. CONCLUSION 1995.

[5] E. B. Koffman, Pascal. Reading, MA: Addison-Wesley, 1995.

Recursion is an efficient technique for definitions and algo- [6] T. A. Standish, Data Structures, Algorithms, and Software Princi-

rithms that make only one recursive call, but can be extremely ples. Reading, MA: Addison-Wesley, 1994.

inefficient if it makes two or more recursive calls. Thus the re- [7] E. B. Koffman and B. R. Maxim, Software Design and Data Structures

in Turbo Pascal. Reading, MA: Addison-Wesley, 1994.

cursive approach is frequently more useful as a conceptual tool [8] A. B. Tucker, W. J. Bradley, R. D. Cupper, and R. G. Epstein, Funda-

rather than as an efficient computational tool. The proofs pre- mentals of Computing II. New York: McGraw-Hill, 1994.

sented in this paper were successfully taught (over a five-year [9] G. J. E. Rawlins, Compared to What? An Introduction to the Analysis of

Algorithms. Rockville, MD: Computer Science, 1992.

period) to first year students at the University of Ottawa. It [10] T. H. Cormen, C. E. Leiserson, and R. L. Rivest, Introduction to Algo-

is suggested that recursion as a problem solving and defining rithms: McGraw Hill, 1990.

tool be covered in the second part of the first computer science [11] R. Sedgewick, Algorithms. Reading, MA: Addison-Wesley, 1988.

course. However, recursive programming should be postponed

for the end of the course (or perhaps better at the beginning of

the second computer science course), after iterative programs Ivan Stojmenovic received the B.S. and M.S. degrees from the University of

are well mastered and stack operation well understood. Novi Sad, Yugoslavia, in 1979 and 1983, respectively, and the Ph.D. degree in

Our method for proving the exponential time complexity of mathematics from the University of Zagreb, Croatia, in 1985.

In 1980, he joined the Institute of Mathematics, University of Novi Sad. In

some branched recursive functions can be generalized for other the fall of 1988, he joined the faculty in the Computer Science Department at

similar functions. If is the maximum value for a function the University of Ottawa, Ottawa, ON, Canada, where currently he holds the

that does not invoke a recursive call (in our examples ) position of a Full Professor. He has published three books and over 140 dif-

ferent papers in journals and conferences. His research interests are wireless

and addition is applied on the results of recursive calls to com- networks, parallel computing, multiple-valued logic, evolutionary computing,

pute , then the number of additions is at least . Thus neural networks, combinatorial algorithms, computational geometry and graph

such recursive functions have complexity since is a theory. He is currently a Managing Editor of Multiple-Valued Logic and an ed-

itor of Parallel Processing Letters, IASTED International Journal of Parallel

constant. Addition may be replaced here with some other oper- and Distributed Systems, Discrete Mathematics and Theoretical Computer Sci-

ations to obtain similar arguments. ence, Parallel Algorithms and Applications, and Tangenta.

- 2007 IscTheory RepeatDiunggah olehShadower
- cs225_hw0Diunggah olehnwa65632
- Structural Tips for Writing Technical PapersDiunggah olehKhaled Md Tuhidul Hossain
- MSC-021 Block-1.pdfDiunggah olehSaanidh
- MCS-031 june 2012Diunggah olehSunny Kumar
- 2.4. an Anagram Detection Example — Problem Solving With Algorithms and Data StructuresDiunggah olehErr33
- Hopcroft-original-CS-TR-71-190Diunggah olehmarttiylioja
- _11 - Big O and RecursionDiunggah olehKim Sia
- 130430121134Diunggah olehvidhya_bineesh
- Infinite Resistor ChainDiunggah olehmayank98108
- BacktrackingDiunggah olehKanahaiya Gupta
- Php DatabaseDiunggah olehAKSHAY4646
- L00 Introduction Eng [Algorithms]Diunggah olehSandeep Gupta
- PS2 - DS102 with Solution.docxDiunggah olehsamuporro
- AnalysisDiunggah olehSerge
- CS353 10 BacktrackingDiunggah olehRaedadobeAdobe
- branson linear recursion taskDiunggah olehapi-298215585
- en-2001-ioi-vzoDiunggah olehHemesh Singh
- 4.Design Analysis of Algorithm QBDiunggah olehVigneshwar Suresh
- InductionDiunggah olehJohnrobjr
- Rebus 9 2013Diunggah olehCostel Andreescu
- III SEM- DESIGN ANALYSIS ALGORITHM.pdfDiunggah olehAnil Kumar
- Data Structures Chaper1 QuestionsDiunggah olehYahya Said
- Dantzig–Wolfe Decomposition and Plant-wide MPC Coordination (2007)Diunggah olehYang Gul Lee
- Quadratic assignment problemDiunggah olehPramod Kumar Verma
- Kmeans is Np-HardDiunggah olehshraddha212
- cfaqsDiunggah olehAwanish Ramesh Tripathi
- Lec_2.2Diunggah olehnouraiz
- Search intensity versus search diversity: a false trade off?Diunggah olehal9028
- 10.1.1.21.8541Diunggah olehmohsenmirzay

- Transformation Strategies Between Block-Oriented and Graph-Oriented Process Modelling LanguagesDiunggah olehravg10
- VariablesDiunggah olehravg10
- Indian+Hills+C+Style+GuideDiunggah olehZe Chen
- Using Randomization in the Teaching of Data Structures and AlgorithmsDiunggah olehravg10
- Carta Inss - DouglasDiunggah olehravg10
- To JNI or Not to JNIDiunggah olehravg10
- Vectorization of Insertion Sort Using AltivecDiunggah olehravg10
- TR SortingDiunggah olehravg10
- ThesisMelattiDiunggah olehravg10
- Level1 Training Guide PortugueseDiunggah olehMarcelo Silveira
- The RC5 Encryption AlgorithmDiunggah olehravg10
- SymbolsDiunggah olehravg10
- DIÁLOGOS HUMANIZANTES 2Diunggah olehravg10
- White SpacesDiunggah olehravg10
- X3D Web Based Algorithm AnimationDiunggah olehravg10
- SortingDiunggah olehravg10
- RaPiDS an Algorithm for Rapid Expression Profile Database SearchDiunggah olehravg10
- Perfect Simulation From TheDiunggah olehravg10
- Parallel Quick Sort AlgorithmDiunggah olehravg10
- Scientific Methods in Computer ScienceDiunggah olehravg10
- Pseudo Code Structured ProgrammingDiunggah olehravg10
- On-Line Versus Off-Line AlgorithmsDiunggah olehravg10
- Simulation Optimization Using Balanced Explorative and Exploitative SearchDiunggah olehravg10
- ReturnDiunggah olehravg10
- Quick Sort ExplanationDiunggah olehTrishool Narayanasetty
- Pseudo Code StandardDiunggah olehravg10
- Pseudo Code a LATEX Style File for DisplayingDiunggah olehravg10
- Phase Change of Limit Laws in the Quicksort RecurrenceDiunggah olehravg10
- Structured ProgrammingDiunggah olehravg10

- Infa_QA1Diunggah olehSam
- jopera-doodlemap-sc09Diunggah olehDanilo Oliveira
- Data ModelingDiunggah olehShibly
- Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 16Diunggah olehSameer Hane
- Unit 5 - Programming Languages - PDFDiunggah olehflorinciri
- PS Interview QuestionsDiunggah olehinsabha
- 8087 NDP Paper p174 PalmerDiunggah olehHariprakash
- NSButton ClassDiunggah olehQamar Saleem
- 40093139 Verilog Interview QuestionsDiunggah olehVinchipsytm Vlsitraining
- AgentModelling-GAIA+JADEDiunggah olehrqkoelle
- TM_MIC_002.pdfDiunggah olehrgx112
- Darpa Budget PlanDiunggah olehPrashantKulkarni
- Export to PDF Php ScriptDiunggah olehTerry
- SQL TrainingDiunggah olehPranjal Gharat
- CCS-C-output-input-functions-lecture1.pdfDiunggah olehandyli2008
- Performance Issue With PLP APBalanceFactLoad TaskDiunggah olehMadhavan Eyunni
- Microsoft PowerPoint - Lect1 [Compatibility Mode]Diunggah olehTaranga Sen
- VitaeDiunggah olehHector Gomez Morales
- nagiosDiunggah olehEdward Callao Cortez
- I-SEM-AIDiunggah olehKetki Muzumdar
- JWT_docDiunggah olehnikhil4tp5136
- 115 Java Interview Questions and Answers – the ULTIMATE List _ Java Code GeeksDiunggah olehfelipemibox
- Digital Signature in Adobe Forms_FIORIDiunggah olehAdaikalam Alexander Rayappa
- Oracle Apps Technical Questions CollectionDiunggah olehapi-3845885
- Practice ExamDiunggah olehDart-44
- MC0083Diunggah olehPadmanabh Mokashi
- Jersey Documentation 1.0.3 User GuideDiunggah olehnaresh921
- Safari - 20-Feb-2018 at 11:46 PM 2.pdfDiunggah olehscodapentavia
- ECMA-116Diunggah olehegonrath
- Strayer Mat 540 Quiz 5Diunggah oleheprinceotis_10363054