Lecture 2 Aug 27-10 goals: Introduction to recursion examples of recursive programs.

Slides:



Advertisements
Similar presentations
Lecture 6 Sept 11, 2008 Goals for the day: Linked list and project # 1 list class in STL (section 3.3) stack – implementation and applications.
Advertisements

Introduction to Recursion and Recursive Algorithms
CS 1031 Recursion (With applications to Searching and Sorting) Definition of a Recursion Simple Examples of Recursion Conditions for Recursion to Work.
Linked Lists. 2 Merge Sorted Lists Write an algorithm that merges two sorted linked lists The function should return a pointer to a single combined list.
ADA: 4. Divide/Conquer1 Objective o look at several divide and conquer examples (merge sort, binary search), and 3 approaches for calculating their.
Recursion.
Lecture 3 Feb 4 summary of last week’s topics and review questions (handout) Today’s goals: Chapter 1 overview (sections 1.4 to 1.6) c++ classes constructors,
CSC2100B Quick Sort and Merge Sort Xin 1. Quick Sort Efficient sorting algorithm Example of Divide and Conquer algorithm Two phases ◦ Partition phase.
Computer Science II Recursion Professor: Evan Korth New York University.
Lecture 2 Feb 3, 2009 goals: continue recursion more examples of recursive programs.
CS 315 March 24 Goals: Heap (Chapter 6) priority queue definition of a heap Algorithms for Insert DeleteMin percolate-down Build-heap.
Lecture 2 Aug 28 goals: Introduction to recursion examples of recursive programs.
Algorithm Design Techniques: Induction Chapter 5 (Except Sections 5.6 and 5.7)
Lecture 12 Oct 13, 2008 Some simple recursive programs recursive problem solving, connection to induction Some examples involving recursion Announcements.
Monday, 12/9/02, Slide #1 CS 106 Intro to CS 1 Monday, 12/9/02  QUESTIONS??  On HW #5 (Due 5 pm today)  Today:  Recursive functions  Reading: Chapter.
Lecture 12 Oct 15 Recursion – more examples Chapter 8 problems and solutions Cell arrays, Chapter 10.
Algorithm Design Techniques: Induction Chapter 5 (Except Section 5.6)
Lecture 5 Sept 12, 2011 Goals: Linked list (Chapter 3) list class in STL (section 3.3) implementing with linked lists.
CS 206 Introduction to Computer Science II 10 / 14 / 2009 Instructor: Michael Eckmann.
Recursion Road Map Introduction to Recursion Recursion Example #1: World’s Simplest Recursion Program Visualizing Recursion –Using Stacks Recursion Example.
1 Chapter 18 Recursion Dale/Weems/Headington. 2 Chapter 18 Topics l Meaning of Recursion l Base Case and General Case in Recursive Function Definitions.
Lecture 4 Feb 5 completion of recursion (inserting into a linked list as last item) analysis of algorithms – Chapter 2.
Lecture 4 Sept 4 Goals: chapter 1 (completion) 1-d array examples Selection sorting Insertion sorting Max subsequence sum Algorithm analysis (Chapter 2)
Algorithm Analysis CS 201 Fundamental Structures of Computer Science.
Simple Recursion. COMP104 Lecture 35 / Slide 2 Recursion: Example 0 * What does the following program do? #include using namespace std; int fac(int n){
CHAPTER 10 Recursion. 2 Recursive Thinking Recursion is a programming technique in which a method can call itself to solve a problem A recursive definition.
Lecture 5 Feb 14, 2011 Goals: Linked list (Chapter 3) list class in STL (section 3.3) implementing with linked lists.
Recursion CITS1001.
Analysis of Algorithms Dilemma: you have two (or more) methods to solve problem, how to choose the BEST? One approach: implement each algorithm in C, test.
Review Binary Tree Binary Tree Representation Array Representation Link List Representation Operations on Binary Trees Traversing Binary Trees Pre-Order.
Department of Computer Science and Engineering, HKUST 1 HKUST Summer Programming Course 2008 Recursion.
A Computer Science Tapestry 1 Recursion (Tapestry 10.1, 10.3) l Recursion is an indispensable technique in a programming language ä Allows many complex.
Chapter 13 Recursion. Topics Simple Recursion Recursion with a Return Value Recursion with Two Base Cases Binary Search Revisited Animation Using Recursion.
1 Sorting Algorithms (Basic) Search Algorithms BinaryInterpolation Big-O Notation Complexity Sorting, Searching, Recursion Intro to Algorithms Selection.
1 Decrease-and-Conquer Approach Lecture 06 ITS033 – Programming & Algorithms Asst. Prof. Dr. Bunyarit Uyyanonvara IT Program, Image and Vision Computing.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
1 Recursion Algorithm Analysis Standard Algorithms Chapter 7.
Ceng-112 Data Structures I Chapter 6 Recursion.
Chapter 11Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 11 l Basics of Recursion l Programming with Recursion Recursion.
Week 5 - Monday.  What did we talk about last time?  Linked list implementations  Stacks  Queues.
Analyzing Complexity of Lists OperationSorted Array Sorted Linked List Unsorted Array Unsorted Linked List Search( L, x ) O(logn) O( n ) O( n ) Insert(
Lecturer: Dr. AJ Bieszczad Chapter 11 COMP 150: Introduction to Object-Oriented Programming 11-1 l Basics of Recursion l Programming with Recursion Recursion.
Recursion Textbook chapter Recursive Function Call a recursive call is a function call in which the called function is the same as the one making.
CS162 - Topic #11 Lecture: Recursion –Problem solving with recursion –Work through examples to get used to the recursive process Programming Project –Any.
Lecture 2 Jan Goals: Introduction to recursion Examples of recursive programs Reading: Chapter 1 of the text.
By: Lokman Chan Recursive Algorithm Recursion Definition: A function that is define in terms of itself. Goal: Reduce the solution to.
1 Today’s Material Iterative Sorting Algorithms –Sorting - Definitions –Bubble Sort –Selection Sort –Insertion Sort.
Merge Sort: Taught By Example CO1406: Algorithms and Data Structures Module Lecturer: Dr. Nearchos Paspallis Week 10 Lab - Practice with Merge sort and.
Lecture 6 Feb 8, 2012 Goals: Linked list (Chapter 3) list class in STL (section 3.3) implementing with linked lists.
Chapter 11Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 11 l Basics of Recursion l Programming with Recursion Recursion.
Foundations of Algorithms, Fourth Edition
FALL 2005CENG 213 Data Structures1 Priority Queues (Heaps) Reference: Chapter 7.
Basic Design Techniques iteration versus recursion divide-and-conquer an example: merge sort.
Lecture 13 Oct 15, 2012 cell array (review) Ch 4 recursion (Ch 12)
Recursion COMP x1 Sedgewick Chapter 5. Recursive Functions problems can sometimes be expressed in terms of a simpler instance of the same problem.
1 Recursion Recursive function: a function that calls itself (directly or indirectly). Recursion is often a good alternative to iteration (loops). Its.
Chapter 15 Running Time Analysis. Topics Orders of Magnitude and Big-Oh Notation Running Time Analysis of Algorithms –Counting Statements –Evaluating.
Chapter 6 (Lafore’s Book) Recursion Hwajung Lee.  Definition: An algorithmic technique. To solve a problem on an instance of size n, the instance is:
Section Recursion 2  Recursion – defining an object (or function, algorithm, etc.) in terms of itself.  Recursion can be used to define sequences.
Section Recursion  Recursion – defining an object (or function, algorithm, etc.) in terms of itself.  Recursion can be used to define sequences.
CSC 143 P 1 CSC 143 Recursion [Chapter 5]. CSC 143 P 2 Recursion  A recursive definition is one which is defined in terms of itself  Example:  Compound.
Chapter 1 Introduction Recursion
Decrease-and-Conquer Approach
Applied Algorithms (Lecture 17) Recursion Fall-23
CS201: Data Structures and Discrete Mathematics I
CS 201 Fundamental Structures of Computer Science
Basics of Recursion Programming with Recursion
CS148 Introduction to Programming II
ITEC324 Principle of CS III
Chapter 1 Introduction Recursion
Presentation transcript:

Lecture 2 Aug goals: Introduction to recursion examples of recursive programs

Recursion Recursive function A function defined in terms of itself e.g. f(x)= 2 * f(x – 1) Recursive definition a concept defined in terms of itself. e.g. an arithmetic expression is either a number, or is of the form X op Y where X and Y are arithmetic expressions and op is an operator.

Recursion Recursive data structure a structure whose substructure is of the same type as the structure e.g. a binary tree is either a single node or a node with two children both of which are also binary trees. Recursive program program that calls itself. int F(int x) { if (x == 1) return 1; else return 2 * F(x – 1); }

Recursion - rules Rule 1: Provide exit from recursion. (focus on base cases – some times, more than one base case is needed.) Rule 2: Make sure that the successive recursive calls progress towards the base case. Rule 3: Assume that recursive calls work. Rule 4: Compound interest rule: Avoid redundant calls.

Recursion – simple examples 1)Compute n! n! = 1 x 2 … x n = (n – 1)! x n 2) Compute … + n f(n) = n + f(n – 1) 3) Compute the n-th Fibonacci number f(n) = f(n – 1) + f(n – 2)

Example: (from Chapter 2 of text) Given x and n, we want to compute x n. Obvious iterative solution: int exp(int x, int n) { int temp = x; for (int j= 1; j < n; ++j) temp*= x; return temp; } The number of multiplications performed is n – 1. We will see that a recursive algorithm provides a much faster solution. Faster algorithm is crucial for RSA encryption algorithm.

Idea behind the algorithm Rule of exponents: x n = (x 2 ) n/2 if n is even x * (x 2 ) (n-1)/2 if n is odd base case n = 1  return x even n  call exp(x*x, n/2) and return the result. odd n  call exp(x*x, (n – 1)/2) and multiply the result of call by x and return the product.

Code for recursive exponent algorithm int exp (int x, int n) { if (n == 1) return x; else if (n%2 == 0) return exp(x*x, n/2); else return x* exp(x*x, (n – 1)/2); } Fact: When called to compute exp(x,100000), the iterative algorithm performs multiplications while the recursive algorithm will performs 21 multiplications.

Recursion with an array input Given two segments of sorted arrays A and B, output the result of merging them as a single sorted array. A B merge(A, 2, 3, B, 9, 13) should return merge(A, 2, 2, B, 9,10) should return the array merge(A, 3, 4, B, 9, 8) should return 5 7 since the second array is empty. (high index < low index means the array is empty.)

What are the base cases?

one array segment is empty. In this case, what is the output?

What are the base cases? one array segment is empty. In this case, what is the output? The other array segment, so we just have to copy the segment to the output.

What are the base cases? one array segment is empty. In this case, what is the output? The other array segment, so we just have to copy the segment to the output. what if both segments are not empty? We need to make recursive call.

Before we proceed, we need to make a change to the prototype of the function merge. Why? We need to add two more parameters - the name of the array and the starting index in the output array at which we want to write.

AB merge(A, 2, 3, B, 9, 13, C, 3) should return C

merge(A, low1,high1, B, low2, high2, C, low) A B merge(A, 9, 13, B, 2, 3, C, 0) Case 1: A[low1] < B[low2] Example: C

merge(A, low1,high1, B, low2, high2, C,low) A B merge(A, 9, 13, B, 2, 3, C, 0) Case 1: A[low1] < B[low2] Example: Step1: move A[low1] to C[low]. Now a recursive call to merge will get the rest of the job done. What call?

merge(A, low1,high1, B, low2, high2, C, low) A B merge(A, 9, 13, B, 2, 3, C, 0) Case 1: A[low1] < B[low2] Example: Step1: move A[low1] to C[low]. Now a recursive call to merge will get the rest of the job done. What call? merge(A, low1+1, high1, B, low2,high2, C, low + 1)

Case 2: A[low1] > B[low2]. Move B[low2] to C[low] and make a recursive call to merge(A,low1, high1, B, low2+1, high2, C, low+1) The complete code is shown below:

void merge(int A[], int low1, int high1, int B[], int low2,int high2, int C[], int low) { if (high1 < low1) copy(B, low2, high2, C,low); else if (high2 < low2) copy(A, low1, high1, C,low); else if (A[low1] < B[low2]) {C[low] = A[low1]; merge(A,low1+1, high1, B, low2, high2, C,low + 1);} else {C[low] = B[low2]; merge(A,low1, high1, B, low2+1, high2, C,low + 1); } void copy(int A[], int s, int t, int B[], int s1) { for (int j= s; j<= t; ++j) B[s1 +j - s] = A[j]; }

Last example: recursion and a linked list. Suppose we want to insert a key x as a last item of a list. a k g c x = ‘b’ a k g c b

void insertLast(int k) { // insert k as the last item of the list Node* tmp = new Node(k); if (head == 0) head = tmp; else if (head->next == 0) { head->next = tmp;} else {List rest; rest.head = head->next; rest.insertLast(k); }