Recursion Chapter 4 Self-Reference. Recursive Definitions Inductive Proofs Implementing Recursion

Size: px
Start display at page:

Download "Recursion Chapter 4 Self-Reference. Recursive Definitions Inductive Proofs Implementing Recursion"

Transcription

1 Recursion Chapter 4 Self-Reference Recursive Definitions Inductive Proofs Implementing Recursion

2 Imperative Algorithms Based on a basic abstract machine model - linear execution model - storage - control structures von Neumann architecture // Factorial public int fac1 (int i) { int result = 1; for (int j=i; j>1; j--) result *= j; return result; } i result j schmiedecke 09 In2-2-Algor.Paradigms 2

3 Applicative Algorithms Based on the principle of inductive definition Evaluation pattern taken from mathematical function evaluation Recursion is a basic step f(1) = 1 f(n) = n*f(n-1) // Factorial recursive public int fac1 (int i) { if (i<2) return 1; return i*fac1(i-1); } schmiedecke 09 In2-2-Algor.Paradigms 3

4 Applicative Algorithms Idea is to apply a function to an argument so you need a function definition like f(1) = 1 f(n) = n*f(n-1) and a method for evaluating that function for a given argument: - Replace variable(s) by arguments - Replace left hand side by right hand side - Repeat until termination So evaluation is described as a set of rewriting rules. schmiedecke 09 In2-2-Algor.Paradigms 4

5 More Formally An applicative algorithm is a list of functions f 0 (v 01,...,v 0n ) = t 0 (v 01,...,v 0n )... f m (v m1,...,v mn ) = t m (v m1,...,v mn ) function name function parameters function expression A function evaluation for a given set of arguments - replace the parameters in the function expression by the corresponding arguments - evaluate all basic operations and functions in the function expression from left to right according to basic priorities The semantics of the applicative algorithm is the evaluation of the first function. schmiedecke 09 In2-2-Algor.Paradigms 5

6 Notation To make functions conform the algorithm definition, we introduce the conditional operator: Instead of: f(1) = 1 f(n) = n*f(n-1) We write: f(n) = if n=1 then 1 else n*f(n-1) fi In Java, the conditional operator is (?:) int f(int n) { return n==1? 1 : n*f(n-1); } schmiedecke 09 In2-2-Algor.Paradigms 6

7 The Semantics of Recursive Functions is the successive application of rewriting rules: fac(5) = 5 * fac(4) = 5 * 4 * fac(3) = 5 * 4 * 3 * fac(2) = 5 * 4 * 3 * 2 * fac(1) = 5 * 4 * 3 * 2 * 1 schmiedecke 09 In2-2-Algor.Paradigms 7

8 The Execution of Recursive Functions uses a stack to save "partial rewritings": call fac(5) push 5, call method call fac(4) push 4, call method call fac(3) push 3, call method call fac(2) push 2, call method call fac(1) push 1, call method base case contin.fac(2 pop, pop, mult(2,1), push 2 contin.fac(3) pop, pop, mult(3,2), push 6 contin.fac(4) pop, pop, mult(6,4), push 24 contin.fac(5) pop, pop, mult(24,5),push 120 schmiedecke 09 In2-2-Algor.Paradigms 8

9 Recursion is Natural To learn downhill skiing - climb up a few metres and learn to plow a right bend to the bottom - climb up a few metres and learn to plow a left bend to the bottom - take the lift all the way up and combine right and left bends until you reach the bottom Let's apply this technique to the Towers of Hanoi... schmiedecke 09 In2-2-Algor.Paradigms 9

10 Towers of Hanoi Puzzle invented by Edouard Lucas in 1883: Put an ordered stack of discs from one peg to another, using a third peg, such that all stacks are ordered at all times. source: For a stack of 1: move disc from start to dest For a stack of 2: move disc from start to aux move disc from start to dest move disc from aux to dest Call this: move 2 from start to dest using aux For a stack of 3: move 2 from start to aux using dest move disc from start to dest move 2 from aux to dest using start schmiedecke 09 In2-2-Algor.Paradigms 10

11 Inductive Aproach A stack of one can be moved directly to the target pole. Apparently, we can move a bigger stack of discs correctly to the target pole if we have an auxiliary pole. We have tested it for 2 and 3. Use this idea to first move the top of the stack to the auxiliary pole leaving the biggest disc behind to be moved directly to the target. move it to the target. Then move the top of the stack back to the origin, leaving the auxiliary pole empty again for the next step.... until the stack size is 1. move the top of the stack is a recursive application of hanoi to a smaller stack! Parameters? schmiedecke 09 In2-2-Algor.Paradigms 11

12 Express Hanoi in Java public class Hanoi extends Applet { private Tower start, aux, dest; private int size; public Hanoi () { this.size = 8; // replace by reading from ComboBox.. start = new Tower(size); aux = new Tower(0); dest = new Tower(0); } public void start() { move(size, start, dest, aux); } private void move(int number, Tower s, Tower d, Tower a) { if (number==1) { d.add(s.remove()); repaint(); } else { move(n-1,s,a,d); move(1,s,d,a); move(n-1,a,d,s); } } public void paint(graphics g) { start.display(g, size, 50, 10); aux.display(g, size, 100, 10); dest.display(g, size, 150, 10); } } schmiedecke 09 In2-2-Algor.Paradigms 12

13 Properties of Hanoi Is it correct? Theorem: if a disc is moved to a stack, it is smaller that ist base Inductive proof: Any movement of a partial stack ends with one stack empty (Lemma1) if a disc is moved which is bigger than the top of a stack, it is moved to an empty stack (Lemma2) - true for first step. - true for second step. - if a partial stack of n-1 discs has been moved properly, a bigger disc is moved to an empty stack in the n th step. schmiedecke 09 In2-2-Algor.Paradigms 13

14 Towers of Hanoi - Complexity schmiedecke 09 In2-2-Algor.Paradigms 14

15 Complexity Argument schmiedecke 09 In2-2-Algor.Paradigms 15

16 schmiedecke 09 In2-2-Algor.Paradigms 16

17 Recursion is Powerful It can be shown that every algorithm that can be specified can be specified recursively! So, recursion has maximum computation potential. In most situations, you can replace recursion by iteration. Can you do so for Hanoi? Later we will learn about a certain type of complex recursion which cannot be expressed iteratively (so-called R Gramars). schmiedecke 09 In2-2-Algor.Paradigms 17

18 Replacing Recursion by Iteration Lets consider two "famous" recusive algorithms: the factorial n! fac(n) = if n=1 then 1 else n*f(n-1) fi and the Fibonacci numbers (rabbit generations) fib(n) = if n<=1 then 1 else fib(n-1)+fib(n-2) schmiedecke 09 In2-2-Algor.Paradigms 18

19 Replacing Recursion by Iteration the factorial n! fac(n) = if n=1 then 1 else n*f(n-1) fi int fac(int n) { int result = 1; } for (int i=2; i<=n; i++) result *= i; return result; Solution is straightforward: use local variable to store intermediate results otherwise returned by recursive calls schmiedecke 09 In2-2-Algor.Paradigms 19

20 Replacing Recursion by Iteration and the Fibonacci numbers (rabbit generations) fib(n) = if n<=1 then 1 else fib(n-1)+fib(n-2) int fib(int n) { int current = 1, prev = 0, temp; for (int i=1; i<n; i++) { temp = current; current = current + prev; prev = temp; } return current; Same idea, } use local variables to store values that would result from recursive calls schmiedecke 09 In2-2-Algor.Paradigms 20

21 The Termination Problem What is the domain of the factorial function? fac(n) = if n=1 then 1 else n*fac(n-1) fi int fac(int n) { int result = 1; for (int i=2; i<=n; i++) result *= i; return result; } Oh dear, the applicative agorithm will run indefinitely for negative n... Generally, algorithms must be suspected of being partial functions, i.e they may not terminate on certain arguments. It may be hard to find out, or even impossible... There are algorithms for which we do not know whether they terminate for all valid input data. (There is one in your lab assignments ) schmiedecke 09 In2-2-Algor.Paradigms 21

22 Tail Recursion There is a "nice" type of recursion, called tail recursion: Such functions have a direct solution for a fixed set of arguments. For every recursive call, a monotonic modification is made to the parameters moving them "towards" the direct solution arguments. Tail recursion is easily translated into iteration. The termination of tail recursive functions can generally be determined easily (but not always). So, in programming, try to use tail recursion and make it obvious. schmiedecke 09 In2-2-Algor.Paradigms 22

23 Recursion and Complexity How do you determine the complexity of a recursive function? Use recursive call as basic step. How much does it cost except for the rec. call? How many recursions occur? the number of calls depends on the parameter value. Multipy step cost by recursion depth. Fac is called n times, each step has constant complexity, so the complexity is O(n): fac(n) = if n=1 then 1 else n*f(n-1) fi Fib is called 2*n times, so the complexity is O(n) too: fic(n) = if (n=1 n=2) then 1 else fib(n-1)+fib(n-2) fi Those were easy to assess, because the parameter is decreasing steadily. But what about this function: f(x) = if x>100 then x-10 else f(f(x+11)) fi schmiedecke 09 In2-2-Algor.Paradigms 23

24 Incredible Growth: The Ackermann Function Here is the worst example ever known: ack(x,y) = if x<=0 then y+1 Some function results else if y<=0 then f(x-1,1) else f(x-1,f(x, y-1)) f(0,0) = 1 f(1,0) = 2 f(1,1) = 3 f(2,2) = 7 f(3,3) = 61 f(4,4) = 2**2**2**2**2**2**2 3 = 2**2**2** As this growth is achieved by adding 1, the time consumption, i.e. the functions comlexity, is just as incredible schmiedecke 09 In2-2-Algor.Paradigms 24

25 Mathematics of Applicative Programming: The Lambda Calculus Inventend by Church and Kleene in the 1930ies. Mathematical model of function application (to arguments) Computability question: Which problems can be solved algorithmically, and can it be decided whether a problem has a solution. Abstract machine for applicative algorithms: If it terminates on a given algorithm, it is said to be computable. schmiedecke 09 In2-2-Algor.Paradigms 25

26 Lamda Calculus Simplified Lambda stands for argument binding: Function f applied to argument a results r: Lambda x f a r If f is x+2, and a is 7 we get Lambda x x With nesting: Lambda x x+(lambda y y+3 4) 5 Lambda x x So, computation is described as rewriting of one list of terms by another schmiedecke 09 In2-2-Algor.Paradigms 26

27 The LISP language Describing computation as a set of rewriting rules has many offsprings in artificial intelligence. Here is a very early rewriting language, invented in 1958 by John Mc Carthy: LISP List Programming - The idea is that every program is a list of rewriting rules. - The result of a rewriting is again a list. - Terminal symbols can be specified to be excluded from rewriting. - Lambda binding is applied to introduce parameters. - Special list operations cons, car and cdr allow list manipulation and traversion. LISP is still in use implemented in Unix, control language in the EMACS editior. schmiedecke 09 In2-2-Algor.Paradigms 27

28 (DEFUN THROW-DIE () (+ (RANDOM 6) 1) ) Some LISP (DEFUN THROW-DICE () (LIST (THROW-DIE) (THROW-DIE)) ) (DEFUN BOXCARS-P (A B) (AND (EQUAL '6 A) (EQUAL '6 B) ) ) (DEFUN SNAKE-EYES-P (A B) (AND (EQUAL '1 A) (EQUAL '1 B) ) ) schmiedecke 09 In2-2-Algor.Paradigms 28

29 Factorial in LISP (DEFUN FAC (N) (COND ((EQUAL N 1) 1) ((MULT N (FAC (MINUS N 1)) ) ) ) Evaluate Call of FAC (3) by Rewriting: FAC (3) MULT 3 (FAC (MINUS 3 1)) MULT 3 (FAC (2)) MULT 3 (MULT 2 (FAC (MINUS 2 1)) MULT 3 (MULT 2 (FAC (1))) MULT 3 (MULT 2 1) MULT schmiedecke 09 In2-2-Algor.Paradigms 29

30 What's so Charming about LISP? Fully declarative non-operational. Completely general. Easy to extend programs by adding definitions. Results can be added as (redundant) definitions, such as (DEFUN FAC(3) 6) Supports artifical "learning" schmiedecke 09 In2-2-Algor.Paradigms 30

31 Recursive Fun: Fractals If you draw a simple shape repeatedly with decreasing size and changing orientation, you get a pattern. The simplest way to do that is recursion: - draw a pattern - spawning a similar pattern of smaller size and modified position and orientation - which again spawns another smaller pattern - until the size is below a certain limit Such patterns are usually called fractals... And they are fun doing schmiedecke 09 In2-2-Algor.Paradigms 31

32 Two Fractal Classics Pythagoras Tree: - Draw a square starting from ist base line - then, for a given angle, draw a pair of Pythagoras squares opposite to its base line - continue for each sqare until too small. Sierpinski's Triangle: - Take a line between two points - Replace it by three lines of half that length, turning -60, +60,+60 left - Replace each of these lines again by three, turning +60, -60, -60 for the first line, -60, +60, +60 for the middle line, +60, -60, -60 for the last line. - Repeat for each line, changing orientation every time until too small schmiedecke 09 In2-2-Algor.Paradigms 32

33 Famous simple Fractals Pythagoras Fractal Szerpinsky Triangle schmiedecke 09 In2-2-Algor.Paradigms 33

34 Pythagoras public void paint (Graphics g) { } g.clearrect(0,0,500,500); painttree(g, double x1, double y1, // tree defined double x2, double y2); // by base line // paint tree paints the major square // determines the base lines of the smaller squares // and calls itself recursively for the two smaller squares schmiedecke 09 In2-2-Algor.Paradigms 34

35 Everybody loves Mandelbrodt Fractals. Have Fun... schmiedecke 09 In2-2-Algor.Paradigms 35

36 That's enough for today!! Next time, we will return to recursion to consider the most general problem solver: Recursive Backtracking, Before Jumping into the Tradition of Sorting and Searching

11. Recursion. n (n 1)!, otherwise. Mathematical Recursion. Recursion in Java: Infinite Recursion. 1, if n 1. n! =

11. Recursion. n (n 1)!, otherwise. Mathematical Recursion. Recursion in Java: Infinite Recursion. 1, if n 1. n! = Mathematical Recursion 11. Recursion Mathematical Recursion, Termination, Call Stack, Examples, Recursion vs. Iteration, Lindenmayer Systems Many mathematical functions can be naturally defined recursively.

More information

12. Recursion. n (n 1)!, otherwise. Educational Objectives. Mathematical Recursion. Recursion in Java: 1, if n 1. n! =

12. Recursion. n (n 1)!, otherwise. Educational Objectives. Mathematical Recursion. Recursion in Java: 1, if n 1. n! = Educational Objectives You understand how a solution to a recursive problem can be implemented in Java. You understand how methods are being executed in an execution stack. 12. Recursion Mathematical Recursion,

More information

Recursive Definitions

Recursive Definitions Recursion Objectives Explain the underlying concepts of recursion Examine recursive methods and unravel their processing steps Explain when recursion should and should not be used Demonstrate the use of

More information

Lecture 10: Recursion vs Iteration

Lecture 10: Recursion vs Iteration cs2010: algorithms and data structures Lecture 10: Recursion vs Iteration Vasileios Koutavas School of Computer Science and Statistics Trinity College Dublin how methods execute Call stack: is a stack

More information

UNIT 5A Recursion: Basics. Recursion

UNIT 5A Recursion: Basics. Recursion UNIT 5A Recursion: Basics 1 Recursion A recursive function is one that calls itself. Infinite loop? Not necessarily. 2 1 Recursive Definitions Every recursive definition includes two parts: Base case (non

More information

Data Structures And Algorithms

Data Structures And Algorithms Data Structures And Algorithms Recursion Eng. Anis Nazer First Semester 2016-2017 Recursion Recursion: to define something in terms of itself Example: factorial n!={ 1 n=0 n (n 1)! n>0 Recursion Example:

More information

Programming Language Pragmatics

Programming Language Pragmatics Chapter 10 :: Functional Languages Programming Language Pragmatics Michael L. Scott Historical Origins The imperative and functional models grew out of work undertaken Alan Turing, Alonzo Church, Stephen

More information

Experiment: The Towers of Hanoi. left middle right

Experiment: The Towers of Hanoi. left middle right Experiment: The Towers of Hanoi 1 Experiment: The Towers of Hanoi 1 Die Türme von Hanoi - So gehts! 2 Die Türme von Hanoi - So gehts! 2 Die Türme von Hanoi - So gehts! 2 Die Türme von Hanoi - So gehts!

More information

1.3. Conditional expressions To express case distinctions like

1.3. Conditional expressions To express case distinctions like Introduction Much of the theory developed in the underlying course Logic II can be implemented in a proof assistant. In the present setting this is interesting, since we can then machine extract from a

More information

Recursion. Tjark Weber. Functional Programming 1. Based on notes by Sven-Olof Nyström. Tjark Weber (UU) Recursion 1 / 37

Recursion. Tjark Weber. Functional Programming 1. Based on notes by Sven-Olof Nyström. Tjark Weber (UU) Recursion 1 / 37 Tjark Weber Functional Programming 1 Based on notes by Sven-Olof Nyström Tjark Weber (UU) Recursion 1 / 37 Background FP I / Advanced FP FP I / Advanced FP This course (Functional Programming I) (5 hp,

More information

UNIT 5A Recursion: Basics. Recursion

UNIT 5A Recursion: Basics. Recursion UNIT 5A Recursion: Basics 1 Recursion A recursive operation is an operation that is defined in terms of itself. Sierpinski's Gasket http://fusionanomaly.net/recursion.jpg 2 1 Recursive Definitions Every

More information

Recursion. Lars-Henrik Eriksson. Functional Programming 1. Based on a presentation by Tjark Weber and notes by Sven-Olof Nyström

Recursion. Lars-Henrik Eriksson. Functional Programming 1. Based on a presentation by Tjark Weber and notes by Sven-Olof Nyström Lars-Henrik Eriksson Functional Programming 1 Based on a presentation by Tjark Weber and notes by Sven-Olof Nyström Tjark Weber (UU) Recursion 1 / 41 Comparison: Imperative/Functional Programming Comparison:

More information

Functional Programming. Big Picture. Design of Programming Languages

Functional Programming. Big Picture. Design of Programming Languages Functional Programming Big Picture What we ve learned so far: Imperative Programming Languages Variables, binding, scoping, reference environment, etc What s next: Functional Programming Languages Semantics

More information

www.thestudycampus.com Recursion Recursion is a process for solving problems by subdividing a larger problem into smaller cases of the problem itself and then solving the smaller, more trivial parts. Recursion

More information

Recursion. Chapter 7

Recursion. Chapter 7 Recursion Chapter 7 Chapter Objectives To understand how to think recursively To learn how to trace a recursive method To learn how to write recursive algorithms and methods for searching arrays To learn

More information

Recursion. Chapter 7. Copyright 2012 by Pearson Education, Inc. All rights reserved

Recursion. Chapter 7. Copyright 2012 by Pearson Education, Inc. All rights reserved Recursion Chapter 7 Contents What Is Recursion? Tracing a Recursive Method Recursive Methods That Return a Value Recursively Processing an Array Recursively Processing a Linked Chain The Time Efficiency

More information

Lambda Calculus LC-1

Lambda Calculus LC-1 Lambda Calculus LC-1 λ- Calculus History-1 Developed by Alonzo Church during 1930 s-40 s One fundamental goal was to describe what can be computed. Full definition of λ-calculus is equivalent in power

More information

Lambda Calculus. Gunnar Gotshalks LC-1

Lambda Calculus. Gunnar Gotshalks LC-1 Lambda Calculus LC-1 l- Calculus History Developed by Alonzo Church during 1930 s-40 s One fundamental goal was to describe what can be computed. Full definition of l-calculus is equivalent in power to

More information

Identify recursive algorithms Write simple recursive algorithms Understand recursive function calling

Identify recursive algorithms Write simple recursive algorithms Understand recursive function calling Recursion Identify recursive algorithms Write simple recursive algorithms Understand recursive function calling With reference to the call stack Compute the result of simple recursive algorithms Understand

More information

Chapter 15: Recursion

Chapter 15: Recursion Chapter 15: Recursion Starting Out with Java: From Control Structures through Objects Fifth Edition by Tony Gaddis Chapter Topics Chapter 15 discusses the following main topics: Introduction to Recursion

More information

APCS-AB: Java. Recursion in Java December 12, week14 1

APCS-AB: Java. Recursion in Java December 12, week14 1 APCS-AB: Java Recursion in Java December 12, 2005 week14 1 Check point Double Linked List - extra project grade Must turn in today MBCS - Chapter 1 Installation Exercises Analysis Questions week14 2 Scheme

More information

Lecture Notes 4 More C++ and recursion CSS 501 Data Structures and Object-Oriented Programming Professor Clark F. Olson

Lecture Notes 4 More C++ and recursion CSS 501 Data Structures and Object-Oriented Programming Professor Clark F. Olson Lecture Notes 4 More C++ and recursion CSS 501 Data Structures and Object-Oriented Programming Professor Clark F. Olson Reading for this lecture: Carrano, Chapter 2 Copy constructor, destructor, operator=

More information

Functional Languages. Hwansoo Han

Functional Languages. Hwansoo Han Functional Languages Hwansoo Han Historical Origins Imperative and functional models Alan Turing, Alonzo Church, Stephen Kleene, Emil Post, etc. ~1930s Different formalizations of the notion of an algorithm

More information

Organization of Programming Languages CS3200/5200N. Lecture 11

Organization of Programming Languages CS3200/5200N. Lecture 11 Organization of Programming Languages CS3200/5200N Razvan C. Bunescu School of Electrical Engineering and Computer Science bunescu@ohio.edu Functional vs. Imperative The design of the imperative languages

More information

Functional Programming. Pure Functional Programming

Functional Programming. Pure Functional Programming Functional Programming Pure Functional Programming Computation is largely performed by applying functions to values. The value of an expression depends only on the values of its sub-expressions (if any).

More information

CmpSci 187: Programming with Data Structures Spring 2015

CmpSci 187: Programming with Data Structures Spring 2015 CmpSci 187: Programming with Data Structures Spring 2015 Lecture #9 John Ridgway February 26, 2015 1 Recursive Definitions, Algorithms, and Programs Recursion in General In mathematics and computer science

More information

Summer 2017 Discussion 10: July 25, Introduction. 2 Primitives and Define

Summer 2017 Discussion 10: July 25, Introduction. 2 Primitives and Define CS 6A Scheme Summer 207 Discussion 0: July 25, 207 Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write Scheme programs,

More information

Functional Programming Languages (FPL)

Functional Programming Languages (FPL) Functional Programming Languages (FPL) 1. Definitions... 2 2. Applications... 2 3. Examples... 3 4. FPL Characteristics:... 3 5. Lambda calculus (LC)... 4 6. Functions in FPLs... 7 7. Modern functional

More information

recursive algorithms 1

recursive algorithms 1 COMP 250 Lecture 11 recursive algorithms 1 Oct. 2, 2017 1 Example 1: Factorial (iterative)! = 1 2 3 1 factorial( n ){ // assume n >= 1 result = 1 for (k = 2; k

More information

Two Approaches to Algorithms An Example (1) Iteration (2) Recursion

Two Approaches to Algorithms An Example (1) Iteration (2) Recursion 2. Recursion Algorithm Two Approaches to Algorithms (1) Iteration It exploits while-loop, for-loop, repeat-until etc. Classical, conventional, and general approach (2) Recursion Self-function call It exploits

More information

11/2/2017 RECURSION. Chapter 5. Recursive Thinking. Section 5.1

11/2/2017 RECURSION. Chapter 5. Recursive Thinking. Section 5.1 RECURSION Chapter 5 Recursive Thinking Section 5.1 1 Recursive Thinking Recursion is a problem-solving approach that can be used to generate simple solutions to certain kinds of problems that are difficult

More information

Functional Languages. CSE 307 Principles of Programming Languages Stony Brook University

Functional Languages. CSE 307 Principles of Programming Languages Stony Brook University Functional Languages CSE 307 Principles of Programming Languages Stony Brook University http://www.cs.stonybrook.edu/~cse307 1 Historical Origins 2 The imperative and functional models grew out of work

More information

Lambda Calculus and Lambda notation in Lisp II. Based on Prof. Gotshalks notes on Lambda Calculus and Chapter 9 in Wilensky.

Lambda Calculus and Lambda notation in Lisp II. Based on Prof. Gotshalks notes on Lambda Calculus and Chapter 9 in Wilensky. λ Calculus Basis Lambda Calculus and Lambda notation in Lisp II Based on Prof. Gotshalks notes on Lambda Calculus and Chapter 9 in Wilensky Mathematical theory for anonymous functions» functions that have

More information

Scheme. Functional Programming. Lambda Calculus. CSC 4101: Programming Languages 1. Textbook, Sections , 13.7

Scheme. Functional Programming. Lambda Calculus. CSC 4101: Programming Languages 1. Textbook, Sections , 13.7 Scheme Textbook, Sections 13.1 13.3, 13.7 1 Functional Programming Based on mathematical functions Take argument, return value Only function call, no assignment Functions are first-class values E.g., functions

More information

Recursion vs Induction

Recursion vs Induction Recursion vs Induction CS3330: Algorithms The University of Iowa 1 1 Recursion Recursion means defining something, such as a function, in terms of itself For example, let f(x) = x! We can define f(x) as

More information

15. Pointers, Algorithms, Iterators and Containers II

15. Pointers, Algorithms, Iterators and Containers II 498 Recall: Pointers running over the Array 499 Beispiel 15. Pointers, Algorithms, Iterators and Containers II int a[5] = 3, 4, 6, 1, 2; for (int p = a; p < a+5; ++p) std::cout

More information

SCHEME 10 COMPUTER SCIENCE 61A. July 26, Warm Up: Conditional Expressions. 1. What does Scheme print? scm> (if (or #t (/ 1 0)) 1 (/ 1 0))

SCHEME 10 COMPUTER SCIENCE 61A. July 26, Warm Up: Conditional Expressions. 1. What does Scheme print? scm> (if (or #t (/ 1 0)) 1 (/ 1 0)) SCHEME 0 COMPUTER SCIENCE 6A July 26, 206 0. Warm Up: Conditional Expressions. What does Scheme print? scm> (if (or #t (/ 0 (/ 0 scm> (if (> 4 3 (+ 2 3 4 (+ 3 4 (* 3 2 scm> ((if (< 4 3 + - 4 00 scm> (if

More information

Recursion. EECS2030: Advanced Object Oriented Programming Fall 2017 CHEN-WEI WANG

Recursion. EECS2030: Advanced Object Oriented Programming Fall 2017 CHEN-WEI WANG Recursion EECS2030: Advanced Object Oriented Programming Fall 2017 CHEN-WEI WANG Recursion: Principle Recursion is useful in expressing solutions to problems that can be recursively defined: Base Cases:

More information

LECTURE 16. Functional Programming

LECTURE 16. Functional Programming LECTURE 16 Functional Programming WHAT IS FUNCTIONAL PROGRAMMING? Functional programming defines the outputs of a program as a mathematical function of the inputs. Functional programming is a declarative

More information

11/6/17. Functional programming. FP Foundations, Scheme (2) LISP Data Types. LISP Data Types. LISP Data Types. Scheme. LISP: John McCarthy 1958 MIT

11/6/17. Functional programming. FP Foundations, Scheme (2) LISP Data Types. LISP Data Types. LISP Data Types. Scheme. LISP: John McCarthy 1958 MIT Functional programming FP Foundations, Scheme (2 In Text: Chapter 15 LISP: John McCarthy 1958 MIT List Processing => Symbolic Manipulation First functional programming language Every version after the

More information

Recursion vs Induction. CS3330: Algorithms The University of Iowa

Recursion vs Induction. CS3330: Algorithms The University of Iowa Recursion vs Induction CS3330: Algorithms The University of Iowa 1 Recursion Recursion means defining something, such as a function, in terms of itself For example, let f(x) = x! We can define f(x) as

More information

4/19/2018. Chapter 11 :: Functional Languages

4/19/2018. Chapter 11 :: Functional Languages Chapter 11 :: Functional Languages Programming Language Pragmatics Michael L. Scott Historical Origins The imperative and functional models grew out of work undertaken by Alan Turing, Alonzo Church, Stephen

More information

CMSC 132: Object-Oriented Programming II. Recursive Algorithms. Department of Computer Science University of Maryland, College Park

CMSC 132: Object-Oriented Programming II. Recursive Algorithms. Department of Computer Science University of Maryland, College Park CMSC 132: Object-Oriented Programming II Recursive Algorithms Department of Computer Science University of Maryland, College Park Recursion Recursion is a strategy for solving problems A procedure that

More information

Recursion. What is Recursion? Simple Example. Repeatedly Reduce the Problem Into Smaller Problems to Solve the Big Problem

Recursion. What is Recursion? Simple Example. Repeatedly Reduce the Problem Into Smaller Problems to Solve the Big Problem Recursion Repeatedly Reduce the Problem Into Smaller Problems to Solve the Big Problem What is Recursion? A problem is decomposed into smaller sub-problems, one or more of which are simpler versions of

More information

Chapter 11 :: Functional Languages

Chapter 11 :: Functional Languages Chapter 11 :: Functional Languages Programming Language Pragmatics Michael L. Scott Copyright 2016 Elsevier 1 Chapter11_Functional_Languages_4e - Tue November 21, 2017 Historical Origins The imperative

More information

Taking Stock. IE170: Algorithms in Systems Engineering: Lecture 5. The Towers of Hanoi. Divide and Conquer

Taking Stock. IE170: Algorithms in Systems Engineering: Lecture 5. The Towers of Hanoi. Divide and Conquer Taking Stock IE170: Algorithms in Systems Engineering: Lecture 5 Jeff Linderoth Department of Industrial and Systems Engineering Lehigh University January 24, 2007 Last Time In-Place, Out-of-Place Count

More information

CPS 506 Comparative Programming Languages. Programming Language Paradigm

CPS 506 Comparative Programming Languages. Programming Language Paradigm CPS 506 Comparative Programming Languages Functional Programming Language Paradigm Topics Introduction Mathematical Functions Fundamentals of Functional Programming Languages The First Functional Programming

More information

Notes on Higher Order Programming in Scheme. by Alexander Stepanov

Notes on Higher Order Programming in Scheme. by Alexander Stepanov by Alexander Stepanov August 1986 INTRODUCTION Why Scheme? Because it allows us to deal with: 1. Data Abstraction - it allows us to implement ADT (abstact data types) in a very special way. The issue of

More information

SOFTWARE DEVELOPMENT 1. Recursion 2018W A. Ferscha (Institute of Pervasive Computing, JKU Linz)

SOFTWARE DEVELOPMENT 1. Recursion 2018W A. Ferscha (Institute of Pervasive Computing, JKU Linz) SOFTWARE DEVELOPMENT 1 Recursion 2018W (Institute of Pervasive Computing, JKU Linz) PRINCIPLE OF SELF-REFERENCE Recursion: Describing something in a self-similar way. An elegant, powerful and simple way

More information

11/6/17. Outline. FP Foundations, Scheme. Imperative Languages. Functional Programming. Mathematical Foundations. Mathematical Foundations

11/6/17. Outline. FP Foundations, Scheme. Imperative Languages. Functional Programming. Mathematical Foundations. Mathematical Foundations Outline FP Foundations, Scheme In Text: Chapter 15 Mathematical foundations Functional programming λ-calculus LISP Scheme 2 Imperative Languages We have been discussing imperative languages C/C++, Java,

More information

Functions and Recursion

Functions and Recursion Functions and Recursion CSE 130: Introduction to Programming in C Stony Brook University Software Reuse Laziness is a virtue among programmers Often, a given task must be performed multiple times Instead

More information

Recursion. Dr. Jürgen Eckerle FS Recursive Functions

Recursion. Dr. Jürgen Eckerle FS Recursive Functions Recursion Dr. Jürgen Eckerle FS 2008 Recursive Functions Recursion, in mathematics and computer science, is a method of defining functions in which the function being defined is applied within its own

More information

Chapter 15. Functional Programming Languages

Chapter 15. Functional Programming Languages Chapter 15 Functional Programming Languages Copyright 2009 Addison-Wesley. All rights reserved. 1-2 Chapter 15 Topics Introduction Mathematical Functions Fundamentals of Functional Programming Languages

More information

Algorithm. Building blocks of algorithm

Algorithm. Building blocks of algorithm UNIT I ALGORITHMIC PROBLEM SOLVING 9 Algorithms, building blocks of algorithms (statements, state, control flow, functions), notation (pseudo code, flow chart, programming language), algorithmic problem

More information

Chapter 5: Recursion

Chapter 5: Recursion Chapter 5: Recursion Objectives Looking ahead in this chapter, we ll consider Recursive Definitions Function Calls and Recursive Implementation Anatomy of a Recursive Call Tail Recursion Nontail Recursion

More information

Discussion on Writing of Recursive Algorithm

Discussion on Writing of Recursive Algorithm , pp.127-134 http://dx.doi.org/10.14257/ijhit.2013.6.6.11 Discussion on Writing of Recursive Algorithm Song Jinping Computer Department, Jining Teachers College, Wulanchabu, China jnsongjinping@126.com

More information

Functions. CS10001: Programming & Data Structures. Sudeshna Sarkar Professor, Dept. of Computer Sc. & Engg., Indian Institute of Technology Kharagpur

Functions. CS10001: Programming & Data Structures. Sudeshna Sarkar Professor, Dept. of Computer Sc. & Engg., Indian Institute of Technology Kharagpur Functions CS10001: Programming & Data Structures Sudeshna Sarkar Professor, Dept. of Computer Sc. & Engg., Indian Institute of Technology Kharagpur 1 Recursion A process by which a function calls itself

More information

Introduction to Object-Oriented Programming

Introduction to Object-Oriented Programming Introduction to Object-Oriented Programming Recursion Christopher Simpkins chris.simpkins@gatech.edu CS 1331 (Georgia Tech) Recursion 1 / 11 Recursion A recursive processes or data structure is defined

More information

Introduction to Functional Programming and basic Lisp

Introduction to Functional Programming and basic Lisp Introduction to Functional Programming and basic Lisp Based on Slides by Yves Lespérance & Peter Roosen-Runge 1 Functional vs Declarative Programming declarative programming uses logical statements to

More information

q To develop recursive methods for recursive mathematical functions ( ).

q To develop recursive methods for recursive mathematical functions ( ). Chapter 8 Recursion CS: Java Programming Colorado State University Motivations Suppose you want to find all the files under a directory that contains a particular word. How do you solve this problem? There

More information

q To develop recursive methods for recursive mathematical functions ( ).

q To develop recursive methods for recursive mathematical functions ( ). /2/8 Chapter 8 Recursion CS: Java Programming Colorado State University Motivations Suppose you want to find all the files under a directory that contains a particular word. How do you solve this problem?

More information

Chapter 5: Recursion. Objectives

Chapter 5: Recursion. Objectives Chapter 5: Recursion Objectives Looking ahead in this chapter, we ll consider Recursive Definitions Function Calls and Recursive Implementation Anatomy of a Recursive Call Tail Recursion Nontail Recursion

More information

Types of Recursive Methods

Types of Recursive Methods Types of Recursive Methods Types of Recursive Methods Direct and Indirect Recursive Methods Nested and Non-Nested Recursive Methods Tail and Non-Tail Recursive Methods Linear and Tree Recursive Methods

More information

An Elegant Weapon for a More Civilized Age

An Elegant Weapon for a More Civilized Age An Elegant Weapon for a More Civilized Age Solving an Easy Problem What are the input types? What is the output type? Give example input/output pairs Which input represents the domain of the recursion,

More information

Reading 8 : Recursion

Reading 8 : Recursion CS/Math 40: Introduction to Discrete Mathematics Fall 015 Instructors: Beck Hasti, Gautam Prakriya Reading 8 : Recursion 8.1 Recursion Recursion in computer science and mathematics refers to the idea of

More information

Overview. What is recursion? When one function calls itself directly or indirectly.

Overview. What is recursion? When one function calls itself directly or indirectly. 1 2.3 Recursion Overview What is recursion? When one function calls itself directly or indirectly. Why learn recursion? New mode of thinking. Powerful programming paradigm. Many computations are naturally

More information

Scheme Tutorial. Introduction. The Structure of Scheme Programs. Syntax

Scheme Tutorial. Introduction. The Structure of Scheme Programs. Syntax Scheme Tutorial Introduction Scheme is an imperative language with a functional core. The functional core is based on the lambda calculus. In this chapter only the functional core and some simple I/O is

More information

Fall 2018 Discussion 8: October 24, 2018 Solutions. 1 Introduction. 2 Primitives

Fall 2018 Discussion 8: October 24, 2018 Solutions. 1 Introduction. 2 Primitives CS 6A Scheme Fall 208 Discussion 8: October 24, 208 Solutions Introduction In the next part of the course, we will be working with the Scheme programming language. In addition to learning how to write

More information

INF4820: Algorithms for Artificial Intelligence and Natural Language Processing. Common Lisp Fundamentals

INF4820: Algorithms for Artificial Intelligence and Natural Language Processing. Common Lisp Fundamentals INF4820: Algorithms for Artificial Intelligence and Natural Language Processing Common Lisp Fundamentals Stephan Oepen & Murhaf Fares Language Technology Group (LTG) August 30, 2017 Last Week: What is

More information

COMP 250 Fall Recursive algorithms 1 Oct. 2, 2017

COMP 250 Fall Recursive algorithms 1 Oct. 2, 2017 Recursion Recursion is a technique for solving problems in which the solution to the problem of size n is based on solutions to versions of the problem of size smaller than n. Many problems can be solved

More information

Algorithmic Methods Tricks of the Trade

Algorithmic Methods Tricks of the Trade Algorithmic Methods Tricks of the Trade 5A Recursion 15-105 Principles of Computation, Carnegie Mellon University - CORTINA 1 Recursion A recursive operation is an operation that is defined in terms of

More information

Recursion. Chapter 5

Recursion. Chapter 5 Recursion Chapter 5 Chapter Objectives To understand how to think recursively To learn how to trace a recursive method To learn how to write recursive algorithms and methods for searching arrays To learn

More information

Solving problems by recursion

Solving problems by recursion Solving problems by recursion How can you solve a complex problem? Devise a complex solution Break the complex problem into simpler problems Sometimes, the simpler problem is similar to (but smaller than)

More information

An introduction to Scheme

An introduction to Scheme An introduction to Scheme Introduction A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a framework within which we organize

More information

Chapter 10: Recursive Problem Solving

Chapter 10: Recursive Problem Solving 2400 COMPUTER PROGRAMMING FOR INTERNATIONAL ENGINEERS Chapter 0: Recursive Problem Solving Objectives Students should Be able to explain the concept of recursive definition Be able to use recursion in

More information

MIDTERM EXAMINATION - CS130 - Spring 2005

MIDTERM EXAMINATION - CS130 - Spring 2005 MIDTERM EAMINATION - CS130 - Spring 2005 Your full name: Your UCSD ID number: This exam is closed book and closed notes Total number of points in this exam: 231 + 25 extra credit This exam counts for 25%

More information

Reduction & Recursion Overview

Reduction & Recursion Overview Reduction & Recursion Overview Reduction definition Reduction techniques Recursion definition Recursive thinking (Many) recursion examples Indirect recursion Runtime stack Factorial isnumericstring add

More information

Denotational Semantics. Domain Theory

Denotational Semantics. Domain Theory Denotational Semantics and Domain Theory 1 / 51 Outline Denotational Semantics Basic Domain Theory Introduction and history Primitive and lifted domains Sum and product domains Function domains Meaning

More information

Recursive Functions of Symbolic Expressions and Their Computation by Machine Part I

Recursive Functions of Symbolic Expressions and Their Computation by Machine Part I Recursive Functions of Symbolic Expressions and Their Computation by Machine Part I by John McCarthy Ik-Soon Kim Winter School 2005 Feb 18, 2005 Overview Interesting paper with By John Mitchell Interesting

More information

Recursion. notes Chapter 8

Recursion. notes Chapter 8 Recursion notes Chapter 8 1 Tower of Hanoi A B C move the stack of n disks from A to C can move one disk at a time from the top of one stack onto another stack cannot move a larger disk onto a smaller

More information

Principles of Programming Languages

Principles of Programming Languages Principles of Programming Languages Slides by Yaron Gonen and Dana Fisman Based on Book by Mira Balaban and Lesson 20 Lazy Lists Collaboration and Management Dana Fisman www.cs.bgu.ac.il/~ppl172 1 Lazy

More information

FP Foundations, Scheme

FP Foundations, Scheme FP Foundations, Scheme In Text: Chapter 15 1 Functional Programming -- Prelude We have been discussing imperative languages C/C++, Java, Fortran, Pascal etc. are imperative languages Imperative languages

More information

Chapter 3 Programming with Recursion

Chapter 3 Programming with Recursion Plan Chapter 3 Programming with Recursion 1. Examples... 3.2 2. Correctness... 3.5 3. Construction methodology... 3.13 4. Forms of recursion... 3.16 Sven-Olof Nyström/IT Dept/Uppsala University FP 3.1

More information

Recursion: Factorial (1) Recursion. Recursion: Principle. Recursion: Factorial (2) Recall the formal definition of calculating the n factorial:

Recursion: Factorial (1) Recursion. Recursion: Principle. Recursion: Factorial (2) Recall the formal definition of calculating the n factorial: Recursion EECS2030: Advanced Object Oriented Programming Fall 2017 CHEN-WEI WANG Recursion: Factorial (1) Recall the formal definition of calculating the n factorial: 1 if n = 0 n! = n (n 1) (n 2) 3 2

More information

6.001 Notes: Section 4.1

6.001 Notes: Section 4.1 6.001 Notes: Section 4.1 Slide 4.1.1 In this lecture, we are going to take a careful look at the kinds of procedures we can build. We will first go back to look very carefully at the substitution model,

More information

CS : Data Structures

CS : Data Structures CS 600.226: Data Structures Michael Schatz Sept 23, 2016 Lecture 9: Stacks Assignment 3: Due Sunday Sept 25 @ 10pm Remember: javac Xlint:all & checkstyle *.java & JUnit Solutions should be independently

More information

Recursive Thinking. Chapter 8: Recursion. Recursive Definitions. Recursion. Java Software Solutions for AP* Computer Science A 2nd Edition

Recursive Thinking. Chapter 8: Recursion. Recursive Definitions. Recursion. Java Software Solutions for AP* Computer Science A 2nd Edition Chapter 8: Recursion Presentation slides for Recursive Thinking Recursion is a programming technique in which a method can call itself to solve a problem Java Software Solutions for AP* Computer Science

More information

Imperative, OO and Functional Languages A C program is

Imperative, OO and Functional Languages A C program is Imperative, OO and Functional Languages A C program is a web of assignment statements, interconnected by control constructs which describe the time sequence in which they are to be executed. In Java programming,

More information

DM536 Introduction to Programming. Peter Schneider-Kamp.

DM536 Introduction to Programming. Peter Schneider-Kamp. DM536 Introduction to Programming Peter Schneider-Kamp petersk@imada.sdu.dk! http://imada.sdu.dk/~petersk/dm536/! Python & Linux Install Party next week (Tuesday 14-17) NEW Fredagsbar ( Nedenunder ) Participants

More information

Lambda Calculus. Variables and Functions. cs3723 1

Lambda Calculus. Variables and Functions. cs3723 1 Lambda Calculus Variables and Functions cs3723 1 Lambda Calculus Mathematical system for functions Computation with functions Captures essence of variable binding Function parameters and substitution Can

More information

EECE.3170: Microprocessor Systems Design I Summer 2017 Homework 4 Solution

EECE.3170: Microprocessor Systems Design I Summer 2017 Homework 4 Solution 1. (40 points) Write the following subroutine in x86 assembly: Recall that: int f(int v1, int v2, int v3) { int x = v1 + v2; urn (x + v3) * (x v3); Subroutine arguments are passed on the stack, and can

More information

Architecture of LISP Machines. Kshitij Sudan March 6, 2008

Architecture of LISP Machines. Kshitij Sudan March 6, 2008 Architecture of LISP Machines Kshitij Sudan March 6, 2008 A Short History Lesson Alonzo Church and Stephen Kleene (1930) λ Calculus ( to cleanly define "computable functions" ) John McCarthy (late 60 s)

More information

Department of Computer Science Yale University Office: 314 Watson Closely related to mathematical induction.

Department of Computer Science Yale University Office: 314 Watson Closely related to mathematical induction. 2/6/12 Overview CS 112 Introduction to Programming What is recursion? When one function calls itself directly or indirectly. (Spring 2012) Why learn recursion? New mode of thinking. Powerful programming

More information

CS 112 Introduction to Programming

CS 112 Introduction to Programming CS 112 Introduction to Programming (Spring 2012) Lecture #13: Recursion Zhong Shao Department of Computer Science Yale University Office: 314 Watson http://flint.cs.yale.edu/cs112 Acknowledgements: some

More information

Lecture #24: Programming Languages and Programs

Lecture #24: Programming Languages and Programs Lecture #24: Programming Languages and Programs A programming language is a notation for describing computations or processes. These range from low-level notations, such as machine language or simple hardware

More information

2.3 Recursion 7/21/2014 5:12:34 PM

2.3 Recursion 7/21/2014 5:12:34 PM 3 Recursion Introduction to Programming in Java: An Interdisciplinary Approach Robert Sedgewick and Kevin Wayne Copyright 2002 2010 7/21/2014 5:12:34 PM Factorial The factorial of a positive integer N

More information

CSC 8301 Design and Analysis of Algorithms: Recursive Analysis

CSC 8301 Design and Analysis of Algorithms: Recursive Analysis CSC 8301 Design and Analysis of Algorithms: Recursive Analysis Professor Henry Carter Fall 2016 Housekeeping Quiz #1 New TA office hours: Tuesday 1-3 2 General Analysis Procedure Select a parameter for

More information

T ::=Nat T T. zero : Nat. This rule can be instantiated for any type T, so it is actually a family of rules, one for each type.

T ::=Nat T T. zero : Nat. This rule can be instantiated for any type T, so it is actually a family of rules, one for each type. V Capretta 46 G54FOP 2018 Chapter 6 System T We have seen that the simple types of λ allow us to define only a limited class of operations. We can program addition and multiplication but not exponentiation.

More information

CSCC24 Functional Programming Scheme Part 2

CSCC24 Functional Programming Scheme Part 2 CSCC24 Functional Programming Scheme Part 2 Carolyn MacLeod 1 winter 2012 1 Based on slides from Anya Tafliovich, and with many thanks to Gerald Penn and Prabhakar Ragde. 1 The Spirit of Lisp-like Languages

More information

Introduction to the Lambda Calculus

Introduction to the Lambda Calculus Introduction to the Lambda Calculus Overview: What is Computability? Church s Thesis The Lambda Calculus Scope and lexical address The Church-Rosser Property Recursion References: Daniel P. Friedman et

More information