CS116 - Module 5 - Accumulative Recursion
|
|
- Bernice Greene
- 5 years ago
- Views:
Transcription
1 CS116 - Module 5 - Accumulative Recursion Cameron Morland Winter Cameron Morland CS116 - Module 5 - Accumulative Recursion
2 Types of Recursion Structural Recursion Generative Recursion Accumulative Recursion 3 Cameron Morland CS116 - Module 5 - Accumulative Recursion
3 Structural Recursion what we ve been doing so far Template for code is based on recursive definition of the data. Examples: Define the set N of natural numbers: 1 0 is in N. 2 If n is in N then n + 1 is in N. def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) These both use the countdown template we used in Racket. Racket lists were defined recursively. A list is either empty or (cons v L) where v is a value L is another list. We extracted the value using first, and the remaining list using rest. This is not how it works in Python, but we can still process a list L that way, using L[0] instead of first and L[1:] instead of rest. def sum(l): if n == []: return 0 else: return L[0] + sum(l[1:]) 4 Cameron Morland CS116 - Module 5 - Accumulative Recursion
4 Generative Recursion Generative Recursion is Recursion not modelled after the structure of the data. For example, def is_palindrome(s): if len(s) < 2: return True else: return s[0] == s[-1] and is_palindrome(s[1:-1]) This is not structural recursion unless s is defined in a really strange way! 5 Cameron Morland CS116 - Module 5 - Accumulative Recursion
5 Generative Recursion Consider new ways (other than the definition of the data) to break into subproblems. Requires more creativity in solutions. We can do more Different solutions techniques. Even more problems can be solved. More variations no standard template. Generative Recursion is the alternative to structural recursion. We don t really care about the difference between structural and generative recursion. It merely means that you cannot rely on templates to design your code. 6 Cameron Morland CS116 - Module 5 - Accumulative Recursion
6 Trace factorial # factorial: Nat -> Nat def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) factorial(5) => 5 * factorial(4) => 5 * (4 * factorial(3)) => 5 * (4 * (3 * factorial(2))) => 5 * (4 * (3 * (2 * factorial(1)))) => 5 * (4 * (3 * (2 * (1 * factorial(0))))) => 5 * (4 * (3 * (2 * (1 * 1)))) => 5 * (4 * (3 * (2 * 1))) => 5 * (4 * (3 * 2)) => 5 * (4 * 6) => 5 * 24 => 120 The computer keeps track of all variables to multiply later, and this takes memory. 8 Cameron Morland CS116 - Module 5 - Accumulative Recursion
7 Accumulative Recursion Instead of leaving all the multiplication to the end, accumulate it as we go. The recursive function will consume the accumulated values. We ll need a helper function to initialize the accumulator. 9 Cameron Morland CS116 - Module 5 - Accumulative Recursion
8 Accumulative factorial # remember_fact: Nat Nat -> Nat def remember_fact( product, n0): if n0 <= 0: return product else: return remember_fact( product*n0, n0-1) # accumulative_factorial: Nat -> Nat def accumulative_factorial(n): return remember_fact(1, n) accumulative_factorial(5) => remember_fact(1, 5) => remember_fact(5, 4) => remember_fact(20, 3) => remember_fact(60, 2) => remember_fact(120, 1) => remember_fact(120, 0) => 120 There is nothing left over to multiply later, so memory usage may not increase. 10 Cameron Morland CS116 - Module 5 - Accumulative Recursion
9 Differences and similarities in implementations remember_fact needs a helper function to keep track of the work done so far Both implementations are correct, but factorial does all calculations after reaching the base case remember_fact does the calculations as we go. product is called the accumulator Mathematically equivalent, but not computationally equivalent. 11 Cameron Morland CS116 - Module 5 - Accumulative Recursion
10 Accumulative Recursion This technique is called accumulative recursion. It may be used with structural recursion, in which case it may be called structural recursion with an accumulator. It may also be used with generative recursion. 12 Cameron Morland CS116 - Module 5 - Accumulative Recursion
11 Accumulative Recursion Wrapper Function: The wrapper function sets the initial value of the accumulator(s). The wrapper function may also handle special cases. Recall: def accumulative_factorial(n): return remember_fact(1, n) Helper Function: Does most of the work. Requires at least two parameters: The accumulator records what has been done so far. The remainder records what remains to be done (and is used to identify the base cases). Some problems may need more than one accumulator or tracker. Recall: def remember_fact(product, n0): Cameron Morland CS116 - Module 5 - Accumulative Recursion
12 Accumulative function pattern def acc_helper(acc, remaining,...): if at base case of remaining: return acc else: ##... maybe do some extra work here... return acc_helper( updated acc, updated remaining,...) ## Key point: the return has * nothing* outside the acc_helper call. ## We return * exactly* what acc_helper returns. def fn(...): ## Consider special cases, as needed. return... acc_helper( initial acc, initial remaining,...)... Exercise: Rewrite this non-accumulative function list_sum to create an accumulative function list_sum(l) which consumes a (listof Int) and returns the sum. def list_sum(l): if L == []: return 0 else: return L[0] + list_sum(l[1:])
13 Accumulative Fibonacci Numbers The nth Fibonacci number is the sum of the two previous Fibonacci numbers: where f 0 = 0, f 1 = 1. f n = f n 1 + f n 2 Exercise: Type in this program, and verify that it works. # fib(n): returns the nth Fibonacci number. def fib(n): if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2) What is fib(30)? What is fib(35)? What is fib(40)? This is a purely structural program, but it is very slow. Exercise: Write a function fib(n) which uses accumulative recursion to compute the first n Fibonacci numbers. Hint: use a helper extend_fib(fibs, n) where fibs accumulates the result.
14 Reversing a List This is non-accumulative recursion: # invert(l): return a list with the elements of L in reverse order # invert: ( listof Any) -> ( listof Any) def invert(l): if len(l) <= 1: return L else: return invert(l[1:]) + [L[0]] # ˆˆˆˆˆˆˆˆˆ # Stuff outside the recursive call # means it ' s non - accumulative. Exercise: def invert( orig): mylist = orig. copy() acc = [] acc_invert( mylist, acc) return acc Write an accumulative helper function acc_invert(l, A) which will allow this to return an inverted copy of orig. Use append and pop so at the end L == [] and A contains the answer.
15 Avoiding the recursion depth limit A new function: list(range(5)) => [0,1,2,3,4] Using the structural recursive my_max, we are limited in the length of the list we can work on. my_max(list(range(5))) => 4, but my_max(list(range(2000))) results in RecursionError: maximum recursion depth exceeded in comparison Why? Each recursive call shortens the list by only one. We make another recursive call for each item in the list. Let s break the list up a different way: generative recursion. Instead of making one recursive call on L[1:] and comparing that with L[0], split the list in two more or less equal halves, and recurse on each of those. L[:len(L)//2] => first half L[len(L)//2:] => second half Exercise: By splitting the list in two halves, use generative recursion to write a function that returns the maximum value in a (listof Int). 20 Cameron Morland CS116 - Module 5 - Accumulative Recursion
16 Steps for Generative Recursion 1 Break the problem into any subproblem(s) that seem natural for the problem. 2 Determine the base case(s). 3 Solve the subproblems, recursively if necessary. 4 Determine how to combine subproblem solutions to solve the original problem. 5 Test! Without a template, it can be more difficult to be sure you have tested all possibilities. Test thoroughly. 21 Cameron Morland CS116 - Module 5 - Accumulative Recursion
17 Example: gcd The greatest common divisor (gcd) of two natural numbers is the largest natural number that divides evenly into both. gcd(10, 25) = 5 gcd(20, 22) = 2 gcd(47, 21) = 1 This is a structurally recursive function that computes gcd. It uses the countdown template on n. # gcd_countdown(a,b,n): return the # greatest divisor of a and b which # is <= n. # gcd: Nat Nat -> Nat def gcd_countdown(a, b, n): if a % n == 0 and b % n == 0: return n else: return gcd_countdown(a, b, n-1) # gcd(a,b): return the gcd of a and b # gcd: Nat Nat -> Nat def gcd(a, b): return gcd_countdown(a, b, a) 22 Cameron Morland CS116 - Module 5 - Accumulative Recursion
18 Euclid s Algorith for gcd When two unequal numbers are set out, and the less is continually subtracted in turn from the greater, if the number which is left never measures the one before it until a unit is left, then the original numbers are relatively prime. [...and if the number left does eventually measure one before it, that number is the gcd.] Euclid s Elements, Book VII, Proposition I. def gcd(a, b): if a == 0: return b elif b == 0: return a else: return gcd(b, a % b) This is not structural; it is generative. But it still has a base case still is recursive 23 Cameron Morland CS116 - Module 5 - Accumulative Recursion
19 Tracing accumulative, generative recursion Exercise: Given mylist = [1,0,4,3,2], trace find(mylist, 0). # help(l, i, s):...ouch... # help: ( listof Nat) Nat Nat -> Nat def help(l, i, s): if L[i] == s: return i else: return help(l, L[i], s) # find(l, i): Find where i is in L. # find: ( listof Nat) Nat -> Nat def find(l,i): return help(l, i, i) Exercise: Now with mylist = [4,2,0,4,3], trace find(mylist, 0). What happens and why? 24 Cameron Morland CS116 - Module 5 - Accumulative Recursion
20 Locally defined functions (inner functions) in Python You can t have two variables with the same name, even if one is a function: # foo(x) returns 1 more than x # foo: Int -> Int def foo(x): return x + 1 # bar(y) returns 2*( y+1) # bar: Int -> Int def bar(y): return foo(2* y)...but you can define functions locally: # bar(y) returns 2*( y+1) # bar: Int -> Int def bar(y): # foo(x): returns 1 more than x # foo: Int -> Int def foo(x): return x + 1 return foo(2* y) bar(5) => 11 foo = 42 bar(5) -> TypeError: 'int' object is not callable bar(5) => 11 foo = 42 bar(5) => 11 You may now define helper functions locally on assignments. You still need the design recipe.
21 Removing Duplicates To remove all copies of some value (e.g. 4) from a list, we may use filter: list(filter(lambda x: x!= 4, [4, 2, 3, 4, 6])) => [2, 3, 6] Exercise: Using this idea, write a function singles(l) which consumes listof Int and returns a list like L but containing only the first instance of each element. For example, singles([1,2,1,3,4,2]) => [1,2,3,4] Do not use a lambda, instead use a locally-defined function. 26 Cameron Morland CS116 - Module 5 - Accumulative Recursion
22 Locally defined functions and design recipes for accumulative recursion You need to write the design recipe even for locally defined functions. As in Racket, you cannot test locally defined functions. If possible, it s a good idea to write them as ordinary functions and test them before moving them inside. # fib4(n) returns nth Fibonacci # fib4: Nat -> Nat # Example: fib4(10) => 55 def fib4(n): # acc(n0,last, prev) produces (n+n0)th Fibonacci number, # where last is the (n)th, and prev is (n-1) th # acc: Nat Nat Nat -> Nat def acc (n0, last, prev): if n0 >= n: return last else: return acc(n0+1, last+prev, last) # Body of fib4 if n==0: return 0 else: return acc(1,1,0) 28 Cameron Morland CS116 - Module 5 - Accumulative Recursion
23 Goals of Module 5 Understand how to write recursive functions in Python. Write functions that are structurally recursive, and ones that are not structurally recursive. Write functions that use accumulative recursion. Before we begin the next module, please Read Think Python, chapter Cameron Morland CS116 - Module 5 - Accumulative Recursion
Module 05: Types of recursion
Module 05: Types of recursion Topics: Review of purely structural recursion Accumulative recursion Generative recursion Readings:ThinkP 5.8-5.10, 6.5-6.7 1 Review: Structural Recursion Template for code
More informationTypes of recursion. Readings: none. In this module: a glimpse of non-structural recursion. CS 135 Winter : Types of recursion 1
Types of recursion Readings: none. In this module: a glimpse of non-structural recursion CS 135 Winter 2018 07: Types of recursion 1 Structural vs. general recursion All of the recursion we have done to
More informationTypes of recursion. Structural vs. general recursion. Pure structural recursion. Readings: none. In this module: learn to use accumulative recursion
Types of recursion Readings: none. In this module: learn to use accumulative recursion learn to recognize generative recursion CS 135 Fall 2018 07: Types of recursion 1 Structural vs. general recursion
More informationOVERVIEW. 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 informationGenerative 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 informationRecursion. Genome 559: Introduction to Statistical and Computational Genomics Elhanan Borenstein
Recursion Genome 559: Introduction to Statistical and Computational Genomics Elhanan Borenstein The merge sort algorithm 1. Split your list into two halves 2. Sort the first half 3. Sort the second half
More informationModule 10: Imperative Programming, Modularization, and The Future
Module 10: Imperative Programming, Modularization, and The Future If you have not already, make sure you Read How to Design Programs Sections 18. 1 CS 115 Module 10: Imperative Programming, Modularization,
More informationSummer 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 informationSCHEME 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 informationInterpreters and Tail Calls Fall 2017 Discussion 8: November 1, 2017 Solutions. 1 Calculator. calc> (+ 2 2) 4
CS 61A Interpreters and Tail Calls Fall 2017 Discussion 8: November 1, 2017 Solutions 1 Calculator We are beginning to dive into the realm of interpreting computer programs that is, writing programs that
More informationModule 04: Lists. Topics: Lists and their methods Mutating lists Abstract list functions Readings: ThinkP 8, 10. CS116 Fall : Lists
Module 04: Lists Topics: Lists and their methods Mutating lists Abstract list functions Readings: ThinkP 8, 10 1 Consider the string method split >>> name = "Harry James Potter" >>> name.split() ['Harry',
More informationRECURSION, RECURSION, (TREE) RECURSION! 2
RECURSION, RECURSION, (TREE) RECURSION! 2 COMPUTER SCIENCE 61A February 5, 2015 A function is recursive if it calls itself. Below is a recursive factorial function. def factorial(n): if n == 0 or n ==
More informationAlgorithm 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 informationCSCI0170. Today s topics. Predicates Natural Number recursion Recursion Diagrams List recursion A first glance at the design recipe
CSCI0170 Predicates Natural Number recursion Recursion Diagrams List recursion A first glance at the design recipe Today s topics Lecture recorded; see course website. Predicates: things that test stuff
More informationSCHEME 8. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. March 23, 2017
SCHEME 8 COMPUTER SCIENCE 61A March 2, 2017 1 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 informationRECURSION 3. 1 Recursion COMPUTER SCIENCE 61A. June 30, 2016
RECURSION 3 COMPUTER SCIENCE 61A June 30, 2016 A recursive function is a function that calls itself. Here s a recursive function: def factorial(n): if n == 0 or n == 1: return 1 else: return n * factorial(n-1)
More informationRecursion CS GMU
Recursion CS 112 @ GMU Recursion 2 Recursion recursion: something defined in terms of itself. function recursion: when a function calls itself. Sometimes this happens directly, sometimes indirectly. direct:
More informationStandard Version of Starting Out with C++, 4th Edition. Chapter 19 Recursion. Copyright 2003 Scott/Jones Publishing
Standard Version of Starting Out with C++, 4th Edition Chapter 19 Recursion Copyright 2003 Scott/Jones Publishing Topics 19.1 Introduction to Recursion 19.2 The Recursive Factorial Function 19.3 The Recursive
More informationRECURSION, RECURSION, (TREE) RECURSION! 3
RECURSION, RECURSION, (TREE) RECURSION! 3 COMPUTER SCIENCE 61A September 18, 2013 A function is recursive if it calls itself. Below is recursive factorial function. def factorial(n): if n == 0 or n ==
More informationCS/CE 2336 Computer Science II
S/E 2336 omputer Science II UT D Session 10 Recursion dapted from D Liang s Introduction to Java Programming, 8 th Ed 2 factorial(0) = 1; omputing Factorial factorial(n) = n*factorial(n-1); n! = n * (n-1)!
More informationWhat is recursion? Recursion. Recursive message() modified. How can a function call itself? contains a reference to itself. Week 10. Gaddis:
Recursion What is recursion? Week 10 Gaddis:19.1-19.5 CS 5301 Spring 2017 Jill Seaman 1 l Generally, when something contains a reference to itself l Math: defining a function in terms of itself l Computer
More informationINTERPRETERS 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 informationRecursion Chapter 8. What is recursion? How can a function call itself? How can a function call itself?
Recursion Chapter 8 CS 3358 Summer I 2012 Jill Seaman What is recursion? Generally, when something contains a reference to itself Math: defining a function in terms of itself Computer science: when a function
More informationRECURSION 7. 1 Recursion COMPUTER SCIENCE 61A. October 15, 2012
RECURSION 7 COMPUTER SCIENCE 61A October 15, 2012 1 Recursion We say a procedure is recursive if it calls itself in its body. Below is an example of a recursive procedure to find the factorial of a positive
More informationCS 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 informationAdmin. How's the project coming? After these slides, read chapter 13 in your book. Quizzes will return
Recursion CS 1 Admin How's the project coming? After these slides, read chapter 13 in your book Yes that is out of order, but we can read it stand alone Quizzes will return Tuesday Nov 29 th see calendar
More informationReading 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 informationModule 08: Searching and Sorting Algorithms
Module 08: Searching and Sorting Algorithms Topics: Searching algorithms Sorting algorithms 1 Application: Searching a list Suppose you have a list L. How could you determine if a particular value is in
More informationModule 06. Topics: Iterative structure in Python Readings: ThinkP 7. CS116 Spring : Iteration
Module 06 Topics: Iterative structure in Python Readings: ThinkP 7 1 In Python, repetition can be recursive def count_down_rec(x): ''' Produces the list [x, x-1, x-2,..., 1,0] count_down:nat->(listof Nat)'''
More informationUse recursion to write a function that duplicates the following function: (def (f L) (map (lambda (x) (+ (sqr x) x)) L))
Write a function (multiply-each L n). It consumes a (listof Num) and a Num, and returns the list containing all the values in L, each multiplied by n. (multiply-each (list 2 3 5) 4) => (list 8 12 20) Write
More informationTAIL RECURSION, SCOPE, AND PROJECT 4 11
TAIL RECURSION, SCOPE, AND PROJECT 4 11 COMPUTER SCIENCE 61A Noveber 12, 2012 1 Tail Recursion Today we will look at Tail Recursion and Tail Call Optimizations in Scheme, and how they relate to iteration
More informationCSE 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 informationRecursion Chapter 8. What is recursion? How can a function call itself? How can a function call itself? contains a reference to itself.
Recursion Chapter 8 CS 3358 Summer II 2013 Jill Seaman What is recursion?! Generally, when something contains a reference to itself! Math: defining a function in terms of itself! Computer science: when
More informationCSCI 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 informationWhat is recursion? Recursion. How can a function call itself? Recursive message() modified. Week 10. contains a reference to itself.
Recursion What is recursion? Week 10 Generally, when something contains a reference to itself Gaddis:19.1-19.5 CS 5301 Spring 2014 Jill Seaman 1 Math: defining a function in terms of itself Computer science:
More informationTwo 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 informationEnvironment Diagrams and Recursion Fall 2017 Discussion 2: September 6, 2017 Solutions. 1 More Environment Diagrams
CS 61A Environment Diagrams and Recursion Fall 2017 Discussion 2: September 6, 2017 Solutions 1 More Environment Diagrams Recall that an environment diagram keeps track of all the variables that have been
More informationENVIRONMENT DIAGRAMS AND RECURSION 2
ENVIRONMENT DIAGRAMS AND RECURSION 2 COMPUTER SCIENCE 61A September 8, 2016 1 More Environment Diagrams Recall that an environment diagram keeps track of all the variables that have been defined and the
More informationCS115 - Module 9 - filter, map, and friends
Fall 2017 Reminder: if you have not already, ensure you: Read How to Design Programs, Intermezzo 3 (Section 18); Sections 19-23. Abstraction abstraction, n. 3a.... The process of isolating properties or
More informationUCT Algorithm Circle: Number Theory
UCT Algorithm Circle: 7 April 2011 Outline Primes and Prime Factorisation 1 Primes and Prime Factorisation 2 3 4 Some revision (hopefully) What is a prime number? An integer greater than 1 whose only factors
More informationWhat is recursion? Recursion. How can a function call itself? Recursive message() modified. Week 10. contains a reference to itself. Gaddis:
Recursion What is recursion? Week 10! Generally, when something contains a reference to itself Gaddis:19.1-19.5! Math: defining a function in terms of itself CS 5301 Spring 2015 Jill Seaman 1! Computer
More informationWorking with recursion
Working with recursion Readings: HtDP, sections 11, 12, 13 (Intermezzo 2). We can extend the idea of a self-referential definition to defining the natural numbers, which leads to the use of recursion in
More informationENVIRONMENT DIAGRAMS AND RECURSION 2
ENVIRONMENT DIAGRAMS AND RECURSION 2 COMPUTER SCIENCE 61A February 4, 2016 1 Environment Diagrams An environment diagram keeps track of all the variables that have been defined and the values they are
More informationRecursion(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 informationCSI33 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 informationLecture 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 informationSCHEME 7. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. October 29, 2015
SCHEME 7 COMPUTER SCIENCE 61A October 29, 2015 1 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 informationq 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 informationq 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 informationRecursive Functions. Biostatistics 615 Lecture 5
Recursive Functions Biostatistics 615 Lecture 5 Notes on Problem Set 1 Results were very positive! (But homework was time-consuming!) Familiar with Union Find algorithms Language of choice 50% tried C
More informationWorking with recursion. From definition to template. Readings: HtDP, sections 11, 12, 13 (Intermezzo 2).
Working with recursion Readings: HtDP, sections 11, 12, 13 (Intermezzo 2). We can extend the idea of a self-referential definition to defining the natural numbers, which leads to the use of recursion in
More informationModule 5: Lists. Readings: HtDP, Sections 9, 10.
Module 5: Lists Readings: HtDP, Sections 9, 10. Lists are the main tool used in Racket to work with unbounded data. As with conditional expressions and structures, the data definition for lists leads naturally
More informationINTERPRETERS AND TAIL CALLS 9
INTERPRETERS AND TAIL CALLS 9 COMPUTER SCIENCE 61A April 9, 2015 We are beginning to dive into the realm of interpreting computer programs that is, writing programs that understand other programs. In order
More informationRecursive 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 informationPython review. 1 Python basics. References. CS 234 Naomi Nishimura
Python review CS 234 Naomi Nishimura The sections below indicate Python material, the degree to which it will be used in the course, and various resources you can use to review the material. You are not
More informationRECURSION, RECURSION, (TREE) RECURSION! 3
RECURSION, RECURSION, (TREE) RECURSION! 3 COMPUTER SCIENCE 61A September 18, 2013 A function is recursive if it calls itself. Below is recursive factorial function. def factorial(n): if n == 0 or n ==
More informationOverview. 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 informationMore Complicated Recursion CMPSC 122
More Complicated Recursion CMPSC 122 Now that we've gotten a taste of recursion, we'll look at several more examples of recursion that are special in their own way. I. Example with More Involved Arithmetic
More informationWhat is recursion? Recursion. How can a function call itself? Recursive message() modified. contains a reference to itself. Week 7. Gaddis:
Recursion What is recursion? Week 7! Generally, when something contains a reference to itself Gaddis:19.1-19.4! Math: defining a function in terms of itself CS 5301 Fall 2013 Jill Seaman 1! Computer science:
More informationCS 135 Winter 2018 Tutorial 7: Accumulative Recursion and Binary Trees. CS 135 Winter 2018 Tutorial 7: Accumulative Recursion and Binary Trees 1
CS 135 Winter 2018 Tutorial 7: Accumulative Recursion and Binary Trees CS 135 Winter 2018 Tutorial 7: Accumulative Recursion and Binary Trees 1 Goals of this tutorial You should be able to... understand
More informationRecursion. CSCI 112: Programming in C
Recursion CSCI 112: Programming in C 1 What is recursion? Recursion looks at a large problem as a bunch of smaller versions of the same problem. 2 2 What is recursion? Recursion looks at a large problem
More informationLecture Notes, CSE 232, Fall 2014 Semester
Lecture Notes, CSE 232, Fall 2014 Semester Dr. Brett Olsen Week 11 - Number Theory Number theory is the study of the integers. The most basic concept in number theory is divisibility. We say that b divides
More informationSpring 2018 Discussion 7: March 21, Introduction. 2 Primitives
CS 61A Scheme Spring 2018 Discussion 7: March 21, 2018 1 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
More informationOverview. 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 informationRACKET BASICS, ORDER OF EVALUATION, RECURSION 1
RACKET BASICS, ORDER OF EVALUATION, RECURSION 1 COMPUTER SCIENCE 61AS 1. What is functional programming? Give an example of a function below: Functional Programming In functional programming, you do not
More information# track total function calls using a global variable global fibcallcounter fibcallcounter +=1
Math 4242 Fibonacci, Memoization lecture 13 Today we talk about a problem that sometimes occurs when using recursion, and a common way to fix it. Recall the Fibonacci sequence (F 0, F 1, F 2,...) that
More informationReduction & Recursion Overview
Reduction & Recursion Overview Reduction definition Reduction techniques Recursion definition Recursive thinking (Many) recursion examples Indirect recursion Runtime stack Factorial isnumericstring add
More informationFall 2017 Discussion 7: October 25, 2017 Solutions. 1 Introduction. 2 Primitives
CS 6A Scheme Fall 207 Discussion 7: October 25, 207 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 informationITERATORS AND STREAMS 9
ITERATORS AND STREAMS 9 COMPUTER SCIENCE 61A November 12, 2015 1 Iterators An iterator is an object that tracks the position in a sequence of values. It can return an element at a time, and it is only
More informationOverview. 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 informationCreating a new data type
Appendix B Creating a new data type Object-oriented programming languages allow programmers to create new data types that behave much like built-in data types. We will explore this capability by building
More informationTAIL 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 informationOutline. Simple Recursive Examples Analyzing Recursion Sorting The Tower of Hanoi Divide-and-conquer Approach In-Class Work. 1 Chapter 6: Recursion
Outline 1 A Function Can Call Itself A recursive definition of a function is one which makes a function call to the function being defined. The function call is then a recursive function call. A definition
More information1 Elementary number theory
Math 215 - Introduction to Advanced Mathematics Spring 2019 1 Elementary number theory We assume the existence of the natural numbers and the integers N = {1, 2, 3,...} Z = {..., 3, 2, 1, 0, 1, 2, 3,...},
More informationOutline: Search and Recursion (Ch13)
Search and Recursion Michael Mandel Lecture 12 Methods in Computational Linguistics I The City University of New York, Graduate Center https://github.com/ling78100/lectureexamples/blob/master/lecture12final.ipynb
More informationLast week. Another example. More recursive examples. How about these functions? Recursive programs. CSC148 Intro. to Computer Science
CSC48 Intro. to Computer Science Lecture 7: Recursive Functions/Structures Trees mir H. Chinaei, Summer 206 Office Hours: R 0-2 B4222 ahchinaei@cs.toronto.edu http://www.cs.toronto.edu/~ahchinaei/ Course
More informationRECURSION: n. SEE RECURSION 3
RECURSION: n. SEE RECURSION 3 COMPUTER SCIENCE 61A June 30, 2015 1 Recursion A recursive function is a function that calls itself. Below is a recursive factorial function. def factorial(n): if n == 0 or
More informationCMPSCI 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 informationSCHEME AND CALCULATOR 5b
SCHEME AND CALCULATOR 5b COMPUTER SCIENCE 6A July 25, 203 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 informationHomework 3: Recursion Due: 11:59 PM, Sep 25, 2018
CS17 Integrated Introduction to Computer Science Klein Homework 3: Recursion Due: 11:59 PM, Sep 25, 2018 Contents 1 Factorial 3 2 Fibonacci 4 3 Odds Only 5 4 Increment All 6 5 Frequency 6 6 Sublist 7 6.1
More informationCSCE 110: Programming I
CSCE 110: Programming I Sample Questions for Exam #1 February 17, 2013 Below are sample questions to help you prepare for Exam #1. Make sure you can solve all of these problems by hand. For most of the
More informationAnnouncements. Project 5 is on the street. Second part is essay questions for CoS teaming requirements.
Announcements Project 5 is on the street. Second part is essay questions for CoS teaming requirements. The first part you do as a team The CoS essay gets individually answered and has separate submission
More informationEuclid's Algorithm. MA/CSSE 473 Day 06. Student Questions Odd Pie Fight Euclid's algorithm (if there is time) extended Euclid's algorithm
MA/CSSE 473 Day 06 Euclid's Algorithm MA/CSSE 473 Day 06 Student Questions Odd Pie Fight Euclid's algorithm (if there is time) extended Euclid's algorithm 1 Quick look at review topics in textbook REVIEW
More informationRepetition Through Recursion
Fundamentals of Computer Science I (CS151.02 2007S) Repetition Through Recursion Summary: In many algorithms, you want to do things again and again and again. For example, you might want to do something
More informationFunctions. 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 informationLists. Readings: HtDP, sections 9 and 10. Avoid 10.3 (uses draw.ss). CS 135 Winter : Lists 1
Lists Readings: HtDP, sections 9 and 10. Avoid 10.3 (uses draw.ss). CS 135 Winter 2018 05: Lists 1 Introducing lists Structures are useful for representing a fixed amount of data. But there are many circumstances
More informationConditionals !
Conditionals 02-201! Computing GCD GCD Problem: Compute the greatest common divisor of two integers. Input: Two integers a and b. Output: The greatest common divisor of a and b. Exercise: Design an algorithm
More informationAssignment: 7. Due: Language level: Allowed recursion:
Assignment: 7 Due: Language level: Allowed recursion: CS 135 Winter 2018 Graham, Nijjar Tuesday, March 13th, 2018 9:00pm Beginning Student with List Abbreviations Pure Structural and Structural Recursion
More informationCS1 Lecture 15 Feb. 19, 2018
CS1 Lecture 15 Feb. 19, 2018 HW4 due Wed. 2/21, 5pm (changed from original 9am so people in Wed. disc. sections can get help) Q2: find *any* solution. Don t try to find the best/optimal solution or all
More information6.00 Notes On Big-O Notation
6.00 Notes On Big-O Notation April 13, 2011 Sarina Canelake See also http://en.wikipedia.org/wiki/big O notation We use big-o notation in the analysis of algorithms to describe an algorithm s usage of
More informationFruitful Recursion (recursion that returns a value)
Recall: fruitful functions and side effects Fruitful Recursion (recursion that returns a value) max, min len, int Recursive func,ons today: sumup factorial countdownlist fibrec countuplist upperrightrepeat
More informationFall 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 informationRecursion. Recursion is: Recursion splits a problem:
Recursion Recursion Recursion is: A problem solving approach, that can... Generate simple solutions to... Certain kinds of problems that... Would be difficult to solve in other ways Recursion splits a
More informationCOMPSCI 230 Discrete Math Prime Numbers January 24, / 15
COMPSCI 230 Discrete Math January 24, 2017 COMPSCI 230 Discrete Math Prime Numbers January 24, 2017 1 / 15 Outline 1 Prime Numbers The Sieve of Eratosthenes Python Implementations GCD and Co-Primes COMPSCI
More informationEmil Sekerinski, McMaster University, Winter Term 16/17 COMP SCI 1MD3 Introduction to Programming
Emil Sekerinski, McMaster University, Winter Term 16/17 COMP SCI 1MD3 Introduction to Programming In Python, variables are names of objects base 5 >>> base = 5 >>> height = 4 >>> area = base*height/2 >>>
More informationCSCC24 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 informationGraphs. Directed graphs. Readings: Section 28
Graphs Readings: Section 28 CS 135 Winter 2018 12: Graphs 1 Directed graphs A directed graph consists of a collection of vertices (also called nodes) together with a collection of edges. An edge is an
More informationMeasuring Efficiency
Growth Announcements Measuring Efficiency Recursive Computation of the Fibonacci Sequence Our first example of tree recursion: fib(3) fib(5) fib(4) def fib(n): if n == 0: return 0 elif n == 1: return 1
More informationChapter 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 informationStatistics Case Study 2000 M. J. Clancy and M. C. Linn
Statistics Case Study 2000 M. J. Clancy and M. C. Linn Problem Write and test functions to compute the following statistics for a nonempty list of numeric values: The mean, or average value, is computed
More information