18
1 Iteration and Recursion Iteration and Recursion (Section 6.5 – 6.6) (Section 6.5 – 6.6) CSCI 431 Programming Languages CSCI 431 Programming Languages Fall 2003 Fall 2003 A compilation of material A compilation of material developed by Felix Hernandez- developed by Felix Hernandez- Campos and Michael Scott Campos and Michael Scott

Iteration and Recursion (Section 6.5 – 6.6)

Embed Size (px)

DESCRIPTION

Iteration and Recursion (Section 6.5 – 6.6). CSCI 431 Programming Languages Fall 2003. A compilation of material developed by Felix Hernandez-Campos and Michael Scott. Control Flow Mechanisms. Sequencing Textual order, Precedence in Expression Selection Iteration Procedural abstraction - PowerPoint PPT Presentation

Citation preview

Page 1: Iteration and Recursion (Section 6.5 – 6.6)

11

Iteration and RecursionIteration and Recursion(Section 6.5 – 6.6)(Section 6.5 – 6.6)

CSCI 431 Programming LanguagesCSCI 431 Programming Languages

Fall 2003Fall 2003

A compilation of material developed by Felix A compilation of material developed by Felix Hernandez-Campos and Michael ScottHernandez-Campos and Michael Scott

Page 2: Iteration and Recursion (Section 6.5 – 6.6)

22

Control Flow MechanismsControl Flow Mechanisms

• SequencingSequencing– Textual order, Precedence in ExpressionTextual order, Precedence in Expression

• SelectionSelection

• IterationIteration

• Procedural abstractionProcedural abstraction

• RecursionRecursion

• ConcurrencyConcurrency

• NondeterminacyNondeterminacy

Page 3: Iteration and Recursion (Section 6.5 – 6.6)

33

Iteration and RecursionIteration and Recursion

• These two control flow mechanism allow a computer These two control flow mechanism allow a computer to perform the same set of operations repeatedlyto perform the same set of operations repeatedly

• They make computers usefulThey make computers useful– Go beyond the power of deterministic finite automataGo beyond the power of deterministic finite automata

• Imperative languagesImperative languages mainly rely on iterations mainly rely on iterations

• Functional languagesFunctional languages make more use of recursion make more use of recursion

Page 4: Iteration and Recursion (Section 6.5 – 6.6)

44

IterationIteration

• Iteration usually takes the form of Iteration usually takes the form of loopsloops

• There are two principal varietiesThere are two principal varieties– Enumeration-controlledEnumeration-controlled loops loops

» E.g.E.g. forfor (int i = 0; i <= 10; i++) { (int i = 0; i <= 10; i++) { … …}}

– Logically controlledLogically controlled loops loops» E.g.E.g. int i = 0; int i = 0; whilewhile (i <= 10) { (i <= 10) { … … i++; i++; }}

Page 5: Iteration and Recursion (Section 6.5 – 6.6)

55

IterationIterationEnumeration-controlled loopsEnumeration-controlled loops

• Enumeration-controlled loopsEnumeration-controlled loops– Index variableIndex variable– Step size and boundsStep size and bounds– Body of the loopBody of the loop

• Fortran I, II and IVFortran I, II and IV dodo 10 i = 1, 10, 2 10: i = 1 10 i = 1, 10, 2 10: i = 1

... ... … … i = i + 2i = i + 210: 10: continue if i <= 10 goto 10continue if i <= 10 goto 10– The value of i is tested at the end of the loopThe value of i is tested at the end of the loop

» When When continuecontinue is reached is reached

– Implementation is very fastImplementation is very fast» This statement is very close to assembly codeThis statement is very close to assembly code

Page 6: Iteration and Recursion (Section 6.5 – 6.6)

66

IterationIterationEnumeration-controlled loopsEnumeration-controlled loops

• Problems:Problems:– Loop boundaries must be integerLoop boundaries must be integer

» Expressions are not allowedExpressions are not allowed

– The index variable can change within the body of the loopThe index variable can change within the body of the loop– Goto statements may jump in and out of the loopGoto statements may jump in and out of the loop– The value of The value of ii after the termination of the loop is after the termination of the loop is

implementation dependentimplementation dependent– The test of the loop takes place at the end, so the body is The test of the loop takes place at the end, so the body is

executed at least onceexecuted at least once» Even if the lower bound is larger than the upper bound!Even if the lower bound is larger than the upper bound!

Page 7: Iteration and Recursion (Section 6.5 – 6.6)

77

IterationIteration

• Loop should Loop should check for empty check for empty boundsbounds

• Code generationCode generation– OptimizationOptimization

Page 8: Iteration and Recursion (Section 6.5 – 6.6)

88

IterationIteration

• Backward loopsBackward loops– Previous code assumed a positive step sizePrevious code assumed a positive step size

Page 9: Iteration and Recursion (Section 6.5 – 6.6)

99

IterationIterationAccess to Index Outside the LoopAccess to Index Outside the Loop

• The value of the index variable at the end of loop is The value of the index variable at the end of loop is undefined in several languagesundefined in several languages

– E.g.E.g. Fortran, Pascal Fortran, Pascal

• Compilers can Compilers can fixfix this, but… this, but…– Generating slower codeGenerating slower code

Page 10: Iteration and Recursion (Section 6.5 – 6.6)

1010

IterationIterationAccess to Index Outside the LoopAccess to Index Outside the Loop

• The value of the index after the loop completes may The value of the index after the loop completes may not be validnot be valid

– E.g.E.g.var c: ‘a’..’z’;var c: ‘a’..’z’;……for c:= ‘a’ to ‘z’ do beginfor c:= ‘a’ to ‘z’ do begin … …end;end;(* what comes after ‘z’? *)(* what comes after ‘z’? *)

• In summary, even the simplest type of loop requires In summary, even the simplest type of loop requires a good designa good design

– You You willwill use language with poorly designed statements! use language with poorly designed statements!

Page 11: Iteration and Recursion (Section 6.5 – 6.6)

1111

IterationIterationIteratorsIterators

• Iterators generalize enumeration-controlled loopsIterators generalize enumeration-controlled loops– In the previous examples, the iteration was always over In the previous examples, the iteration was always over

the elements of an arithmetic sequencethe elements of an arithmetic sequence

• Iterators are used to enumerate the elements of any Iterators are used to enumerate the elements of any well-defined setwell-defined set

– E.g.E.g. In Clu, In Clu,

forfor i i inin from_to_by(first, last, step) from_to_by(first, last, step) dodo……

endend

– Notice some similarity to Perl’s foreach statementNotice some similarity to Perl’s foreach statement

Page 12: Iteration and Recursion (Section 6.5 – 6.6)

1212

IterationIterationIteratorsIterators

• Clu allows any set-like abstract data type to provide Clu allows any set-like abstract data type to provide an iteratoran iterator

– E.g.E.g. integer iterator integer iterator

Page 13: Iteration and Recursion (Section 6.5 – 6.6)

1313

IterationsIterationsIteratorsIterators

• Iterators can also be based on object-oriented design Iterators can also be based on object-oriented design patternspatterns

– Java’s Iterator interfaceJava’s Iterator interface» http://java.sun.com/docs/books/tutorial/collections/interfaces/collhttp://java.sun.com/docs/books/tutorial/collections/interfaces/coll

ection.htmlection.html

• Enumeration-controlled loops evolved significantly Enumeration-controlled loops evolved significantly since FORTRAN’s original since FORTRAN’s original forfor

Page 14: Iteration and Recursion (Section 6.5 – 6.6)

1414

IterationIterationLogically-Controlled LoopsLogically-Controlled Loops

• They have fewer semantic subtletiesThey have fewer semantic subtleties– The programmer has to be more explicitThe programmer has to be more explicit

• There are some design optionsThere are some design options– Pre-testPre-test

» http://java.sun.com/docs/books/jls/second_edition/html/statementhttp://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#237277s.doc.html#237277

– Post-testPost-test» http://java.sun.com/docs/books/jls/second_edition/html/statementhttp://java.sun.com/docs/books/jls/second_edition/html/statement

s.doc.html#6045s.doc.html#6045

– MidtestMidtest» C/C++/Java C/C++/Java idiomidiom: :

for (;;) { ... if (condition) break ... }for (;;) { ... if (condition) break ... }

Page 15: Iteration and Recursion (Section 6.5 – 6.6)

1515

RecursionRecursion

• Recursion requires no special syntaxRecursion requires no special syntax

• Recursion and logically-controlled iteration are Recursion and logically-controlled iteration are equally powerfulequally powerful

• ExampleExample– Compute the greatest common divisorCompute the greatest common divisor– It can be defined as a recurrence: for It can be defined as a recurrence: for aa, , bb positive integers positive integers

baaba

babba

baa

ba

if),gcd(

if),gcd(

if

),gcd(

Page 16: Iteration and Recursion (Section 6.5 – 6.6)

1616

RecursionRecursion

• Implementation Implementation using recursion is using recursion is directdirect

baaba

babba

baa

ba

if),gcd(

if),gcd(

if

),gcd(

IterationIteration

RecursionRecursion

Page 17: Iteration and Recursion (Section 6.5 – 6.6)

1717

NondeterminacyNondeterminacy

• Nondeterministic Nondeterministic constructs make choices constructs make choices between alternatives between alternatives deliberately unspecifieddeliberately unspecified

• This mechanism is This mechanism is specially useful in specially useful in concurrent programsconcurrent programs

– Message-based Message-based concurrent languagesconcurrent languages

Page 18: Iteration and Recursion (Section 6.5 – 6.6)

1818

NondeterminacyNondeterminacy

• This is a very practical matterThis is a very practical matter– Event-driven programming is related to nondeterminacyEvent-driven programming is related to nondeterminacy

» See events and listeners in JavaSee events and listeners in Java» http://java.sun.com/docs/books/tutorial/uiswing/overview/event.hthttp://java.sun.com/docs/books/tutorial/uiswing/overview/event.ht

mlml

– Non-blocking IO is related to nondeterminacyNon-blocking IO is related to nondeterminacy» See the lastest addition to Java (1.4): Channels and SelectorsSee the lastest addition to Java (1.4): Channels and Selectors» http://java.sun.com/j2se/1.4/docs/guide/nio/index.htmlhttp://java.sun.com/j2se/1.4/docs/guide/nio/index.html