Comp215: More Recursion

Size: px
Start display at page:

Download "Comp215: More Recursion"

Transcription

1

2 Comp215: More Recursion Dan S. Wallach (Rice University) xkcd.com/1557 Copyright 2015, Dan S. Wallach. All rights reserved.

3 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2);

4 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2);

5 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

6 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

7 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

8 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

9 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

10 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

11 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

12 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

13 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

14 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

15 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

16 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

17 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

18 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4)

19 Traditional, simple recursion class Fibonacci { return fib(n-1) + fib(n-2); fib(4) Runtime is exponential in n, clearly not the way to go.

20 Should we use mutation? class Fibonacci2 { if (n == 0 n == 1) return 1; int p1 = 1; int p2 = 1; for (int i = 2; i <= n; i++) { int oldp1 = p1; p1 = p2; p2 = oldp1 + p2; return p2; Runtime is O(n), so it s efficient, but is it correct?

21 No mutation!

22 Recursive Fibonacci, linear runtime class Fibonacci3 { return helper(1, 1, 1, n); private static int helper(int p1, int p2, int current, int goal) { if(current == goal) return p2; return helper(p2, p1+p2, current+1, goal);

23 Recursive Fibonacci, linear runtime class Fibonacci3 { return helper(1, 1, 1, n); private static int helper(int p1, int p2, int current, int goal) { if(current == goal) return p2; return helper(p2, p1+p2, current+1, goal);

24 Recursive Fibonacci, linear runtime class Fibonacci3 { return helper(1, 1, 1, n); helper(1,1,1,5) private static int helper(int p1, int p2, int current, int goal) { if(current == goal) return p2; return helper(p2, p1+p2, current+1, goal);

25 Recursive Fibonacci, linear runtime class Fibonacci3 { return helper(1, 1, 1, n); private static int helper(int p1, int p2, int current, int goal) { if(current == goal) return p2; return helper(p2, p1+p2, current+1, goal); helper(1,1,1,5) helper(1,2,2,5)

26 Recursive Fibonacci, linear runtime class Fibonacci3 { return helper(1, 1, 1, n); private static int helper(int p1, int p2, int current, int goal) { if(current == goal) return p2; return helper(p2, p1+p2, current+1, goal); helper(1,1,1,5) helper(1,2,2,5) helper(2,3,3,5)

27 Recursive Fibonacci, linear runtime class Fibonacci3 { return helper(1, 1, 1, n); private static int helper(int p1, int p2, int current, int goal) { if(current == goal) return p2; return helper(p2, p1+p2, current+1, goal); helper(1,1,1,5) helper(1,2,2,5) helper(2,3,3,5) helper(3,5,4,5)

28 Recursive Fibonacci, linear runtime class Fibonacci3 { return helper(1, 1, 1, n); private static int helper(int p1, int p2, int current, int goal) { if(current == goal) return p2; return helper(p2, p1+p2, current+1, goal); helper(1,1,1,5) helper(1,2,2,5) helper(2,3,3,5) helper(3,5,4,5) helper(5,8,5,5)

29 Recursive Fibonacci, linear runtime class Fibonacci3 { return helper(1, 1, 1, n); private static int helper(int p1, int p2, int current, int goal) { if(current == goal) return p2; return helper(p2, p1+p2, current+1, goal); helper(1,1,1,5) helper(1,2,2,5) helper(2,3,3,5) helper(3,5,4,5) helper(5,8,5,5)

30 Recursive Fibonacci, linear runtime class Fibonacci3 { return helper(1, 1, 1, n); private static int helper(int p1, int p2, int current, int goal) { if(current == goal) return p2; return helper(p2, p1+p2, current+1, goal); helper(1,1,1,5) helper(1,2,2,5) helper(2,3,3,5) helper(3,5,4,5) helper(5,8,5,5) This is tail recursion: helper returns a call to itself, no need to come back and do more computation.

31 Why tail-recursion instead of a loop? Easier to convince yourself it s correct Awkward juggling of variables as you change them Versus all values marching in lock step In functional programming languages not called Java, this is efficient Tail call optimization works well, but it s not in the Java virtual machine After 1000 s to s of Java stack frames, you ll run out of memory Footnote: Java9 might have tail call optimization. IBM s J9 JVM apparently has it. Many languages that run on the JVM (Scala, Ceylon, Kotlin, etc.) have it. So what should we do in Java? First, write it in a dumb-but-correct way. Build test cases. Next, if necessary, rewrite with tail-recursion. Verify test cases. Next, if necessary, rewrite as a loop. Verify test cases.

32 fold-right, revisited Fold-right: 1 + (2 + (3 + (4 + (5 + (6 + (7 + 8)))))) class GList<T> { public T foldr(binaryoperator<t> operator, T accumulator) { return operator.apply(value, taillist.foldr(operator, accumulator)); class Empty<T> extends GList<T> { public T foldl(binaryoperator<t> operator, T accumulator) { return accumulator;

33 fold-right, revisited Fold-right: 1 + (2 + (3 + (4 + (5 + (6 + (7 + 8)))))) class GList<T> { public T foldr(binaryoperator<t> operator, T accumulator) { return operator.apply(value, taillist.foldr(operator, accumulator)); Not tail-recursive. apply can t happen until foldr returns. class Empty<T> extends GList<T> { public T foldl(binaryoperator<t> operator, T accumulator) { return accumulator;

34 fold-left, revisited Fold-left: ((((((1+2) + 3) + 4) + 5) + 6) + 7) + 8 class GList<T> { public T foldl(binaryoperator<t> operator, T accumulator) { return taillist.foldl(operator, operator.apply(accumulator, value)); class Empty<T> extends GList<T> { public T foldr(binaryoperator<t> operator, T accumulator) { return accumulator;

35 fold-left, revisited Fold-left: ((((((1+2) + 3) + 4) + 5) + 6) + 7) + 8 class GList<T> { public T foldl(binaryoperator<t> operator, T accumulator) { return taillist.foldl(operator, operator.apply(accumulator, value)); Tail-recursive! apply happens first, then recursion. class Empty<T> extends GList<T> { public T foldr(binaryoperator<t> operator, T accumulator) { return accumulator;

36 Solving the problem in Java foldl can be rewritten as a loop; foldr cannot. So, yes, we ll use mutation, but only to do what the tail-recursive code did. And we ll verify our test cases all along. (And clever programmers will use foldl when possible, since we ll promise that it will be fast.)

37 Live coding Rewriting foldl to use iteration Rewriting other list methods to use foldl Reversing a list with a helper function Generalizing foldl from using a binary operator to a binary function Reversing a list with foldl

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

CS 310 Advanced Data Structures and Algorithms

CS 310 Advanced Data Structures and Algorithms CS 310 Advanced Data Structures and Algorithms Recursion June 27, 2017 Tong Wang UMass Boston CS 310 June 27, 2017 1 / 20 Recursion Recursion means defining something, such as a function, in terms of itself

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

Lambdas and Generics (Intro)

Lambdas and Generics (Intro) Lambdas and Generics (Intro) Dan S. Wallach and Mack Joiner, Rice University Copyright 2016 Dan S. Wallach, All Rights Reserved New this week in Subversion! week02-lists (check it out!) edu/rice/week2lists/glist.java

More information

Chapter 12 Supplement: Recursion with Java 1.5. Mr. Dave Clausen La Cañada High School

Chapter 12 Supplement: Recursion with Java 1.5. Mr. Dave Clausen La Cañada High School Chapter 12 Supplement: Recursion with Java 1.5 La Cañada High School Recursion: Definitions Recursion The process of a subprogram (method) calling itself. A clearly defined stopping state must exist. The

More information

CSE 341 Lecture 5. efficiency issues; tail recursion; print Ullman ; 4.1. slides created by Marty Stepp

CSE 341 Lecture 5. efficiency issues; tail recursion; print Ullman ; 4.1. slides created by Marty Stepp CSE 341 Lecture 5 efficiency issues; tail recursion; print Ullman 3.3-3.4; 4.1 slides created by Marty Stepp http://www.cs.washington.edu/341/ Efficiency exercise Write a function called reverse that accepts

More information

Tail Recursion. ;; a recursive program for factorial (define fact (lambda (m) ;; m is non-negative (if (= m 0) 1 (* m (fact (- m 1))))))

Tail Recursion. ;; a recursive program for factorial (define fact (lambda (m) ;; m is non-negative (if (= m 0) 1 (* m (fact (- m 1)))))) Tail Recursion 1 Tail Recursion In place of loops, in a functional language one employs recursive definitions of functions. It is often easy to write such definitions, given a problem statement. Unfortunately,

More information

Comp215: Covariance and Contravariance

Comp215: Covariance and Contravariance Comp215: Covariance and Contravariance Dan S. Wallach (Rice University) Copyright 2015, Dan S. Wallach. All rights reserved. This is one of those deeper CS theory days Formal definitions aren t immediately

More information

JVM ByteCode Interpreter

JVM ByteCode Interpreter JVM ByteCode Interpreter written in Haskell (In under 1000 Lines of Code) By Louis Jenkins Presentation Schedule ( 15 Minutes) Discuss and Run the Virtual Machine first

More information

Recursion. Recursion [Bono] 1

Recursion. Recursion [Bono] 1 Recursion Idea A few examples wishful thinking method Recursion in classes Ex: palindromes Helper functions Computational complexity of recursive functions Recursive functions with multiple calls Recursion

More information

Object-Oriented Programming and Design D0010E. Interactive lecture 2. Overview of the lecture. Writing larger classes Documentation Recursion

Object-Oriented Programming and Design D0010E. Interactive lecture 2. Overview of the lecture. Writing larger classes Documentation Recursion Object-Oriented Programming and Design D0010E Interactive lecture 2 Overview of the lecture Writing larger classes Documentation Recursion Thinking in Java Riley Object-Oriented Programming and Design

More information

Class 6: Efficiency in Scheme

Class 6: Efficiency in Scheme Class 6: Efficiency in Scheme SI 413 - Programming Languages and Implementation Dr. Daniel S. Roche United States Naval Academy Fall 2011 Roche (USNA) SI413 - Class 6 Fall 2011 1 / 10 Objects in Scheme

More information

Comp215: Trees. Mack Joyner and Dan S. Wallach (Rice University) Copyright 2016, Dan S. Wallach. All rights reserved.

Comp215: Trees. Mack Joyner and Dan S. Wallach (Rice University) Copyright 2016, Dan S. Wallach. All rights reserved. Comp215: Trees Mack Joyner and Dan S. Wallach (Rice University) Copyright 2016, Dan S. Wallach. All rights reserved. Trees Sometimes, a list isn t good enough Array List Binary Tree Hash Table Insert O(1)

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

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

Answers to review questions from Chapter 2

Answers to review questions from Chapter 2 Answers to review questions from Chapter 2 1. Explain in your own words the difference between a method and a program. A method computes a value or performs some operation on behalf of the code for a program.

More information

Announcements. Recursion and why study it. Recursive programming. Recursion basic idea

Announcements. Recursion and why study it. Recursive programming. Recursion basic idea Announcements Recursion and why study it Tutoring schedule updated Do you find the sessions helpful? Midterm exam 1: Tuesday, April 11, in class Scope: will cover up to recursion Closed book but one sheet,

More information

Comp215: More lists. Dan S. Wallach (Rice University) Copyright 2015, Dan S. Wallach. All rights reserved.

Comp215: More lists. Dan S. Wallach (Rice University) Copyright 2015, Dan S. Wallach. All rights reserved. Comp215: More lists Dan S. Wallach (Rice University) Copyright 2015, Dan S. Wallach. All rights reserved. What s a good list interface We now have two different kinds of lists: lazy and eager. (We ll talk

More information

Declarative concurrency. March 3, 2014

Declarative concurrency. March 3, 2014 March 3, 2014 (DP) what is declarativeness lists, trees iterative comutation recursive computation (DC) DP and DC in Haskell and other languages 2 / 32 Some quotes What is declarativeness? ness is important

More information

CS1 Recitation. Week 2

CS1 Recitation. Week 2 CS1 Recitation Week 2 Sum of Squares Write a function that takes an integer n n must be at least 0 Function returns the sum of the square of each value between 0 and n, inclusive Code: (define (square

More information

COMP-202: Foundations of Programming. Lecture 13: Recursion Sandeep Manjanna, Summer 2015

COMP-202: Foundations of Programming. Lecture 13: Recursion Sandeep Manjanna, Summer 2015 COMP-202: Foundations of Programming Lecture 13: Recursion Sandeep Manjanna, Summer 2015 Announcements Final exams : 26 th of June (2pm to 5pm) @ MAASS 112 Assignment 4 is posted and Due on 29 th of June

More information

CSE 143. Complexity Analysis. Program Efficiency. Constant Time Statements. Big Oh notation. Analyzing Loops. Constant Time Statements (2) CSE 143 1

CSE 143. Complexity Analysis. Program Efficiency. Constant Time Statements. Big Oh notation. Analyzing Loops. Constant Time Statements (2) CSE 143 1 CSE 1 Complexity Analysis Program Efficiency [Sections 12.1-12., 12., 12.9] Count number of instructions executed by program on inputs of a given size Express run time as a function of the input size Assume

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

Lecture 12: Dynamic Programming Part 1 10:00 AM, Feb 21, 2018

Lecture 12: Dynamic Programming Part 1 10:00 AM, Feb 21, 2018 CS18 Integrated Introduction to Computer Science Fisler, Nelson Lecture 12: Dynamic Programming Part 1 10:00 AM, Feb 21, 2018 Contents 1 Introduction 1 2 Fibonacci 2 Objectives By the end of these notes,

More information

Comp215: Trees. Dan S. Wallach (Rice University) Copyright 2015, Dan S. Wallach. All rights reserved.

Comp215: Trees. Dan S. Wallach (Rice University) Copyright 2015, Dan S. Wallach. All rights reserved. Comp215: Trees Dan S. Wallach (Rice University) Copyright 2015, Dan S. Wallach. All rights reserved. Trees Sometimes, a list isn t good enough Array List Binary Tree Hash Table Insert O(1) unordered O(n)

More information

Refactoring to Functional. Hadi Hariri

Refactoring to Functional. Hadi Hariri Refactoring to Functional Hadi Hariri Functional Programming In computer science, functional programming is a programming paradigm, a style of building the structure and elements of computer programs,

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

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

Matching & more list functions

Matching & more list functions Matching & more list functions Dan S. Wallach and Mack Joyner, Rice University Copyright 2016 Dan Wallach, All Rights Reserved When you do the same thing over and over If statements start to get ugly If

More information

CSE 130 [Winter 2014] Programming Languages

CSE 130 [Winter 2014] Programming Languages CSE 130 [Winter 2014] Programming Languages Higher-Order Functions! Ravi Chugh! Jan 23 Today s Plan A little more practice with recursion Base Pattern Base Expression Induction Pattern Induction Expression

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

Recursion CSCI 136: Fundamentals of Computer Science II Keith Vertanen Copyright 2011

Recursion CSCI 136: Fundamentals of Computer Science II Keith Vertanen Copyright 2011 Recursion CSCI 136: Fundamentals of Computer Science II Keith Vertanen Copyright 2011 Recursion A method calling itself Overview A new way of thinking about a problem Divide and conquer A powerful programming

More information

CSI33 Data Structures

CSI33 Data Structures Outline Department of Mathematics and Computer Science Bronx Community College October 11, 2017 Outline Outline 1 Chapter 6: Recursion Outline Chapter 6: Recursion 1 Chapter 6: Recursion Measuring Complexity

More information

6.001 Recitation 23: Register Machines and Stack Frames

6.001 Recitation 23: Register Machines and Stack Frames 6.001 Recitation 23: Register achines and Stack Frames RI: Gerald Dalley, dalleyg@mit.edu, 8 ay 2007 http://people.csail.mit.edu/dalleyg/6.001/sp2007/ iscellany apply: See the IT Scheme documentation for

More information

Recursion. Overview. Mathematical induction. Hello recursion. Recursion. Example applications. Goal: Compute factorial N! = 1 * 2 * 3...

Recursion. Overview. Mathematical induction. Hello recursion. Recursion. Example applications. Goal: Compute factorial N! = 1 * 2 * 3... Recursion Recursion Overview A method calling itself A new way of thinking about a problem Divide and conquer A powerful programming paradigm Related to mathematical induction Example applications Factorial

More information

CSCI-1200 Data Structures Spring 2018 Lecture 7 Order Notation & Basic Recursion

CSCI-1200 Data Structures Spring 2018 Lecture 7 Order Notation & Basic Recursion CSCI-1200 Data Structures Spring 2018 Lecture 7 Order Notation & Basic Recursion Review from Lectures 5 & 6 Arrays and pointers, Pointer arithmetic and dereferencing, Types of memory ( automatic, static,

More information

Unit #2: Recursion, Induction, and Loop Invariants

Unit #2: Recursion, Induction, and Loop Invariants Unit #2: Recursion, Induction, and Loop Invariants CPSC 221: Algorithms and Data Structures Will Evans 2012W1 Unit Outline Thinking Recursively Recursion Examples Analyzing Recursion: Induction and Recurrences

More information

Recursion. General Algorithm for Recursion. When to use and not use Recursion. Recursion Removal. Examples

Recursion. General Algorithm for Recursion. When to use and not use Recursion. Recursion Removal. Examples Recursion General Algorithm for Recursion When to use and not use Recursion Recursion Removal Examples Comparison of the Iterative and Recursive Solutions Exercises Unit 19 1 General Algorithm for Recursion

More information

301AA - Advanced Programming

301AA - Advanced Programming 301AA - Advanced Programming Lecturer: Andrea Corradini andrea@di.unipi.it h;p://pages.di.unipi.it/corradini/ Course pages: h;p://pages.di.unipi.it/corradini/dida@ca/ap-18/ AP-2018-19: Algebraic Datatypes

More information

CMPSCI 250: Introduction to Computation. Lecture #14: Induction and Recursion (Still More Induction) David Mix Barrington 14 March 2013

CMPSCI 250: Introduction to Computation. Lecture #14: Induction and Recursion (Still More Induction) David Mix Barrington 14 March 2013 CMPSCI 250: Introduction to Computation Lecture #14: Induction and Recursion (Still More Induction) David Mix Barrington 14 March 2013 Induction and Recursion Three Rules for Recursive Algorithms Proving

More information

Unit #3: Recursion, Induction, and Loop Invariants

Unit #3: Recursion, Induction, and Loop Invariants Unit #3: Recursion, Induction, and Loop Invariants CPSC 221: Basic Algorithms and Data Structures Jan Manuch 2017S1: May June 2017 Unit Outline Thinking Recursively Recursion Examples Analyzing Recursion:

More information

Generative and accumulative recursion. What is generative recursion? Example revisited: GCD. Readings: Sections 25, 26, 27, 30, 31

Generative and accumulative recursion. What is generative recursion? Example revisited: GCD. Readings: Sections 25, 26, 27, 30, 31 Generative and accumulative recursion Readings: Sections 25, 26, 27, 30, 31 Some subsections not explicitly covered in lecture Section 27.2 technique applied to strings CS 135 Fall 2017 11: Generative

More information

Chapter 6 Recursion. The Concept of Recursion

Chapter 6 Recursion. The Concept of Recursion Data Structures for Java William H. Ford William R. Topp Chapter 6 Recursion Bret Ford 2005, Prentice Hall The Concept of Recursion An algorithm is recursive if it can be broken into smaller problems of

More information

The Art of Recursion: Problem Set 10

The Art of Recursion: Problem Set 10 The Art of Recursion: Problem Set Due Tuesday, November Tail recursion A recursive function is tail recursive if every recursive call is in tail position that is, the result of the recursive call is immediately

More information

CSC 1052 Algorithms & Data Structures II: Linked Lists Revisited

CSC 1052 Algorithms & Data Structures II: Linked Lists Revisited CSC 1052 Algorithms & Data Structures II: Linked Lists Revisited Professor Henry Carter Spring 2018 Recap Recursion involves defining a solution based on smaller versions of the same solution Three components:

More information

Recursion. Fundamentals of Computer Science

Recursion. Fundamentals of Computer Science Recursion Fundamentals of Computer Science Outline Recursion A method calling itself All good recursion must come to an end A powerful tool in computer science Allows writing elegant and easy to understand

More information

https://cs.uiowa.edu/resources/events Searching an array Let R(N) be the running time to search for an integer in an unsorted array. Can we find an f(n) such that R N O(f N )? Searching an array Let R(N)

More information

MoreIntro_annotated.v. MoreIntro_annotated.v. Printed by Zach Tatlock. Oct 04, 16 21:55 Page 1/10

MoreIntro_annotated.v. MoreIntro_annotated.v. Printed by Zach Tatlock. Oct 04, 16 21:55 Page 1/10 Oct 04, 16 21:55 Page 1/10 * Lecture 02 Infer some type arguments automatically. Set Implicit Arguments. Note that the type constructor for functions (arrow " >") associates to the right: A > B > C = A

More information

Objectives. Recursion. One Possible Way. How do you look up a name in the phone book? Recursive Methods Must Eventually Terminate.

Objectives. Recursion. One Possible Way. How do you look up a name in the phone book? Recursive Methods Must Eventually Terminate. Objectives Recursion Chapter 11 become familiar with the idea of recursion learn to use recursion as a programming tool become familiar with the binary search algorithm as an example of recursion become

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

Algorithm Design and Recursion. Search and Sort Algorithms

Algorithm Design and Recursion. Search and Sort Algorithms Algorithm Design and Recursion Search and Sort Algorithms Objectives To understand the basic techniques for analyzing the efficiency of algorithms. To know what searching is and understand the algorithms

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

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

Homework 1. Problem 1. The following code fragment processes an array and produces two values in registers $v0 and $v1:

Homework 1. Problem 1. The following code fragment processes an array and produces two values in registers $v0 and $v1: Homework 1 Problem 1 The following code fragment processes an array and produces two values in registers $v0 and $v1: add $v0, $zero, $zero add $v1, $zero, $zero add $t6, $zero, $zero sll $a2, $a1, 2 add

More information

Programming Paradigms

Programming Paradigms PP 2016/17 Unit 16 Erlang Modules, Functions and Control Structures 1/31 Programming Paradigms Unit 16 Erlang Modules, Functions and Control Structures J. Gamper Free University of Bozen-Bolzano Faculty

More information

CSC-140 Assignment 4

CSC-140 Assignment 4 CSC-140 Assignment 4 Please do not Google a solution to these problem, cause that won t teach you anything about programming - the only way to get good at it, and understand it, is to do it! 1 Introduction

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

CSCI 121: Recursive Functions & Procedures

CSCI 121: Recursive Functions & Procedures CSCI 121: Recursive Functions & Procedures Sorting quizzes Every time I give a quiz, I need to enter grades into my gradebook. My grading sheet is organized alphabetically. So I sort the papers alphabetically,

More information

Recursion. Q: What does this evaluate to? Q: What does this evaluate to? CSE 130 : Programming Languages. Higher-Order Functions

Recursion. Q: What does this evaluate to? Q: What does this evaluate to? CSE 130 : Programming Languages. Higher-Order Functions CSE 130 : Programming Languages Higher-Order Functions Ranjit Jhala UC San Diego Recursion A way of life A different way to view computation Solutions for bigger problems From solutions for sub-problems

More information

CMSC 330, Fall 2013, Practice Problems 3

CMSC 330, Fall 2013, Practice Problems 3 CMSC 330, Fall 2013, Practice Problems 3 1. OCaml and Functional Programming a. Define functional programming b. Define imperative programming c. Define higher-order functions d. Describe the relationship

More information

Introduction to Functional Programming

Introduction to Functional Programming A Level Computer Science Introduction to Functional Programming William Marsh School of Electronic Engineering and Computer Science Queen Mary University of London Aims and Claims Flavour of Functional

More information

CSCE 314 Programming Languages

CSCE 314 Programming Languages CSCE 314 Programming Languages Haskell: Higher-order Functions Dr. Hyunyoung Lee 1 Higher-order Functions A function is called higher-order if it takes a function as an argument or returns a function as

More information

The Future of Programming Languages. Will Crichton CS /28/18

The Future of Programming Languages. Will Crichton CS /28/18 The Future of Programming Languages Will Crichton CS 242 11/28/18 Thesis: The future of performance optimization is better programming models, not better optimizers. Thesis: programming languages The future

More information

RECURSION. Problem Solving with Computers-II 6

RECURSION. Problem Solving with Computers-II 6 RECURSION Problem Solving with Computers-II 6 10 12 40 32 43 47 45 41 Let recursion draw you in. Many problems in Computer Science have a recursive structure Identify the recursive structure in these

More information

CS 151. Recursion (Review!) Wednesday, September 19, 12

CS 151. Recursion (Review!) Wednesday, September 19, 12 CS 151 Recursion (Review!) 1 Announcements no class on Friday, and no office hours either (Alexa out of town) unfortunately, Alexa will also just be incommunicado, even via email, from Wednesday night

More information

Shell CSCE 314 TAMU. Higher Order Functions

Shell CSCE 314 TAMU. Higher Order Functions 1 CSCE 314: Programming Languages Dr. Dylan Shell Higher Order Functions 2 Higher-order Functions A function is called higher-order if it takes a function as an argument or returns a function as a result.

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

Recursive Methods and Problem Solving. Chris Kiekintveld CS 2401 (Fall 2010) Elementary Data Structures and Algorithms

Recursive Methods and Problem Solving. Chris Kiekintveld CS 2401 (Fall 2010) Elementary Data Structures and Algorithms Recursive Methods and Problem Solving Chris Kiekintveld CS 2401 (Fall 2010) Elementary Data Structures and Algorithms Review: Calling Methods int x(int n) { int m = 0; n = n + m + 1; return n; int y(int

More information

Computer Science 210 Data Structures Siena College Fall Topic Notes: Recursive Methods

Computer Science 210 Data Structures Siena College Fall Topic Notes: Recursive Methods Computer Science 210 Data Structures Siena College Fall 2017 Topic Notes: Recursive Methods You have seen in this course and in your previous work that iteration is a fundamental building block that we

More information

CS 340 Spring 2019 Midterm Exam

CS 340 Spring 2019 Midterm Exam CS 340 Spring 2019 Midterm Exam Instructions: This exam is closed-book, closed-notes. Electronic devices of any kind are not permitted. Write your final answers, tidily, in the boxes provided. Scratch

More information

Lecture 5: Lazy Evaluation and Infinite Data Structures

Lecture 5: Lazy Evaluation and Infinite Data Structures Lecture 5: Lazy Evaluation and Infinite Data Structures Søren Haagerup Department of Mathematics and Computer Science University of Southern Denmark, Odense October 3, 2017 How does Haskell evaluate a

More information

CS1 Lecture 15 Feb. 18, 2019

CS1 Lecture 15 Feb. 18, 2019 CS1 Lecture 15 Feb. 18, 2019 HW4 due Wed. 2/20, 5pm Q2 and Q3: it is fine to use a loop as long as the function is also recursive. Exam 1, Thursday evening, 2/21, 6:30-8:00pm, W290 CB You must bring ID

More information

Recursion. Comp Sci 1575 Data Structures. Introduction. Simple examples. The call stack. Types of recursion. Recursive programming

Recursion. Comp Sci 1575 Data Structures. Introduction. Simple examples. The call stack. Types of recursion. Recursive programming Recursion Comp Sci 1575 Data Structures Outline 1 2 3 4 Definitions To understand, you must understand. Familiar of recursive definitions Natural numbers are either: n+1, where n is a natural number 1

More information

Write: evens. evens [] ====> [] evens [1;2;3;4] ====> [2;4]

Write: evens. evens [] ====> [] evens [1;2;3;4] ====> [2;4] Write: evens (* val evens: int list -> int list *) let rec evens xs = [] ->... x::xs ->... evens [] ====> [] evens [1;2;3;4] ====> [2;4] Write: evens (* val evens: int list -> int list *) let rec evens

More information

There are some situations in which recursion can be massively inefficient. For example, the standard Fibonacci recursion Fib(n) = Fib(n-1) + Fib(n-2)

There are some situations in which recursion can be massively inefficient. For example, the standard Fibonacci recursion Fib(n) = Fib(n-1) + Fib(n-2) Dynamic Programming There are some situations in which recursion can be massively inefficient. For example, the standard Fibonacci recursion Fib(n) = Fib(n-1) + Fib(n-2) computes the same values over and

More information

Overview. Factorial Revisited. Iteration via Tail Recursion in Racket. An itera*ve approach to factorial. What is itera*on?

Overview. Factorial Revisited. Iteration via Tail Recursion in Racket. An itera*ve approach to factorial. What is itera*on? Iteration via Tail Recursion in Racket CS251 Programming Languages Spring 2019, Lyn Turbak What is itera*on? Overview Racket has no loops, and yet can express itera*on. How can that be? - Tail recursion!

More information

Programming Paradigms

Programming Paradigms PP 2017/18 Unit 12 Functions and Data Types in Haskell 1/45 Programming Paradigms Unit 12 Functions and Data Types in Haskell J. Gamper Free University of Bozen-Bolzano Faculty of Computer Science IDSE

More information

Comp215: Thinking Generically

Comp215: Thinking Generically Comp215: Thinking Generically Dan S. Wallach (Rice University) Copyright 2015, Dan S. Wallach. All rights reserved. Functional APIs On Wednesday, we built a list of Objects. This works. But it sucks. class

More information

The University of North Carolina at Chapel Hill. Comp 411 Computer Organization Spring Problem Set #3 Solution Set

The University of North Carolina at Chapel Hill. Comp 411 Computer Organization Spring Problem Set #3 Solution Set Problem 1. Compiler Appreciation The University of North Carolina at Chapel Hill Comp 411 Computer Organization Spring 2012 Problem Set #3 Solution Set There are many solutions to these problems. My solutions

More information

Overview. Iteration via Tail Recursion in Racket SOLUTIONS. Factorial Revisited. An itera*ve approach to factorial

Overview. Iteration via Tail Recursion in Racket SOLUTIONS. Factorial Revisited. An itera*ve approach to factorial Overview Iteration via Tail Recursion in Racket SOLUTIONS CS251 Programming Languages Spring 2018, Lyn Turbak What is itera*on? Racket has no loops, and yet can express itera*on. How can that be? - Tail

More information

Programming Assignment: recursion, recursion, recursion Due date: Thursday, July 26 at 11:29 am

Programming Assignment: recursion, recursion, recursion Due date: Thursday, July 26 at 11:29 am Programming Assignment: recursion, recursion, recursion Due date: Thursday, July 26 at 11:29 am For this project, you will implement several of static methods in a class called Recursive. You will be provided

More information

OVERVIEW. Recursion is an algorithmic technique where a function calls itself directly or indirectly. Why learn recursion?

OVERVIEW. Recursion is an algorithmic technique where a function calls itself directly or indirectly. Why learn recursion? CH. 5 RECURSION ACKNOWLEDGEMENT: THESE SLIDES ARE ADAPTED FROM SLIDES PROVIDED WITH DATA STRUCTURES AND ALGORITHMS IN JAVA, GOODRICH, TAMASSIA AND GOLDWASSER (WILEY 2016) OVERVIEW Recursion is an algorithmic

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

CS 137 Part 9. Fibonacci, More on Tail Recursion, Map and Filter. November 22nd, 2017

CS 137 Part 9. Fibonacci, More on Tail Recursion, Map and Filter. November 22nd, 2017 CS 137 Part 9 Fibonacci, More on Tail Recursion, Map and Filter November 22nd, 2017 Fibonacci Numbers An ubiquitous sequence named after Leonardo de Pisa (circa 1200) defined by 0 if n == 0 fib(n) = 1

More information

Attributes of Variable. Lecture 13: Run-Time Storage Management. Lifetime. Value & Location

Attributes of Variable. Lecture 13: Run-Time Storage Management. Lifetime. Value & Location Attributes of Variable Lecture 13 Run-Time Storage Management CSC 131 Kim Bruce Scope Lifetime Location Value Done! Lifetime Value & Location FORTRAN - all allocated statically - Stack-based (C/C++/Java/Pascal/...)

More information

Anatomy of a static method, S&W, 2.1, figure page 188. Class.name or just name Scope, S&W, 2.1, figure page 189. Overloading

Anatomy of a static method, S&W, 2.1, figure page 188. Class.name or just name Scope, S&W, 2.1, figure page 189. Overloading Static Methods Anatomy of a static method, S&W, 2.1, figure page 188. Class.name or just name Scope, S&W, 2.1, figure page 189. Overloading public static int abs (final int x) { return x

More information

TAIL CALLS, ITERATORS, AND GENERATORS 11

TAIL CALLS, ITERATORS, AND GENERATORS 11 TAIL CALLS, ITERATORS, AND GENERATORS 11 COMPUTER SCIENCE 61A November 13, 214 1 Tail Calls Scheme implements tail-call optimization, which allows programmers to write recursive functions that use a constant

More information

Wednesday January 31, 2:30-4pm ENGMC 103

Wednesday January 31, 2:30-4pm ENGMC 103 Academic Forum Wednesday January 31, 2:30-4pm ENGMC 103 The academic forum is an opportunity for students to provide feedback to the department on all aspects of the undergraduate academic experience,

More information

Thinking Functionally

Thinking Functionally Thinking Functionally Dan S. Wallach and Mack Joyner, Rice University Copyright 2016 Dan S. Wallach, All Rights Reserved Reminder: Fill out our web form! Fill this out ASAP if you haven t already. http://goo.gl/forms/arykwbc0zy

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

INTERPRETERS 8. 1 Calculator COMPUTER SCIENCE 61A. November 3, 2016

INTERPRETERS 8. 1 Calculator COMPUTER SCIENCE 61A. November 3, 2016 INTERPRETERS 8 COMPUTER SCIENCE 61A November 3, 2016 1 Calculator We are beginning to dive into the realm of interpreting computer programs that is, writing programs that understand other programs. In

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

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

COSE212: Programming Languages. Lecture 4 Recursive and Higher-Order Programming

COSE212: Programming Languages. Lecture 4 Recursive and Higher-Order Programming COSE212: Programming Languages Lecture 4 Recursive and Higher-Order Programming Hakjoo Oh 2016 Fall Hakjoo Oh COSE212 2016 Fall, Lecture 4 September 27, 2016 1 / 21 Recursive and Higher-Order Programming

More information

Recursion. February 02, 2018 Cinda Heeren / Geoffrey Tien 1

Recursion. February 02, 2018 Cinda Heeren / Geoffrey Tien 1 Recursion February 02, 2018 Cinda Heeren / Geoffrey Tien 1 Function calls in daily life How do you handle interruptions in daily life? You're at home, working on PA1 You stop to look up something in the

More information

Recursion(int day){return Recursion(day += 1);} Comp Sci 1575 Data Structures. Recursive design. Convert loops to recursion

Recursion(int day){return Recursion(day += 1);} Comp Sci 1575 Data Structures. Recursive design. Convert loops to recursion Recursion(int day){return Recursion(day += 1);} Comp Sci 1575 Data Structures Outline 1 2 Solution 2: calls 3 Implementation To create recursion, you must create recursion. How to a recursive algorithm

More information

Koch snowflake. Fractal Fern

Koch snowflake. Fractal Fern CSC 111: Recursive Methods Fractals: Self Similar Shapes http://en.wikipedia.org/wiki/fractal Koch snowflake Fractal Fern Functions: Example Problem Factorial of a number: 0! = 1 Factorial(N)= 1! = 1 Product

More information

Overview. Iteration via Tail Recursion in Racket. Factorial Revisited. An itera*ve approach to factorial. What is itera*on?

Overview. Iteration via Tail Recursion in Racket. Factorial Revisited. An itera*ve approach to factorial. What is itera*on? Overview What is itera*on? Iteration via Tail Recursion in Racket Racket has no loops, and yet can express itera*on. How can that be? - Tail recursion! Tail recursive list processing via foldl CS251 Programming

More information

Functional Programming in C++

Functional Programming in C++ Functional Programming in C++ David Letscher Saint Louis University Programming Languages Letscher (SLU) Functional Programming in C++ Prog Lang 1 / 17 What is needed to incorporate functional programming?

More information

CSC-140 Assignment 5

CSC-140 Assignment 5 CSC-140 Assignment 5 Please do not Google a solution to these problems, cause that won t teach you anything about programming - the only way to get good at it, and understand it, is to do it! 1 Introduction

More information