31.1.2001Sudeshna Sarkar, IIT Kharagpur 1 Functions : Recursion Lecture 11 4.2.2002.

Slides:



Advertisements
Similar presentations
Towers of Hanoi Move n (4) disks from pole A to pole C such that a disk is never put on a smaller disk A BC ABC.
Advertisements

Recursion.
Introduction to Recursion and Recursive Algorithms
Back to Sorting – More efficient sorting algorithms.
Recursion Genome 559: Introduction to Statistical and Computational Genomics Elhanan Borenstein.
1 Divide & Conquer Algorithms. 2 Recursion Review A function that calls itself either directly or indirectly through another function Recursive solutions.
Recursion Ellen Walker CPSC 201 Data Structures Hiram College.
Main Index Contents 11 Main Index Contents Week 10 – Recursive Algorithms.
Factorial Recursion stack Binary Search Towers of Hanoi
Recursion.
Lesson 19 Recursion CS1 -- John Cole1. Recursion 1. (n) The act of cursing again. 2. see recursion 3. The concept of functions which can call themselves.
Recursion. Binary search example postponed to end of lecture.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 14: Recursion by.
Recursion.
Chapter 15 Recursive Algorithms. 2 Recursion Recursion is a programming technique in which a method can call itself to solve a problem A recursive definition.
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 14 Recursion.
Recursion A recursive function is a function that calls itself either directly or indirectly through another function. The problems that can be solved.
Recursion.  Identify recursive algorithms  Write simple recursive algorithms  Understand recursive function calling  With reference to the call stack.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 19: Recursion.
Recursion Chapter 7 Copyright ©2012 by Pearson Education, Inc. All rights reserved.
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
Chapter 14: Recursion Starting Out with C++ Early Objects
Chapter 2 Recursion: The Mirrors CS Data Structures Mehmet H Gunes Modified from authors’ slides.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12: Recursion Problem Solving, Abstraction, and Design using C++
A Computer Science Tapestry 1 Recursion (Tapestry 10.1, 10.3) l Recursion is an indispensable technique in a programming language ä Allows many complex.
Recursion.
1 Decrease-and-Conquer Approach Lecture 06 ITS033 – Programming & Algorithms Asst. Prof. Dr. Bunyarit Uyyanonvara IT Program, Image and Vision Computing.
1 Chapter 24 Developing Efficient Algorithms. 2 Executing Time Suppose two algorithms perform the same task such as search (linear search vs. binary search)
Chapter 11Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 11 l Basics of Recursion l Programming with Recursion Recursion.
Recursion and Dynamic Programming. Recursive thinking… Recursion is a method where the solution to a problem depends on solutions to smaller instances.
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.
1 7.Algorithm Efficiency What to measure? Space utilization: amount of memory required  Time efficiency: amount of time required to process the data Depends.
Review Introduction to Searching External and Internal Searching Types of Searching Linear or sequential search Binary Search Algorithms for Linear Search.
Principles of Programming Chapter 11: Recursive Function  In this chapter, you will learn about  Recursion function 1 NI S1 2009/10.
1 7.Algorithm Efficiency What to measure? Space utilization: amount of memory required  Time efficiency: amount of time required to process the data.
CSC 221: Recursion. Recursion: Definition Function that solves a problem by relying on itself to compute the correct solution for a smaller version of.
Data Structures R e c u r s i o n. Recursive Thinking Recursion is a problem-solving approach that can be used to generate simple solutions to certain.
Java Programming: Guided Learning with Early Objects Chapter 11 Recursion.
Functions-Recall 1. 2 Parameter passing & return void main() { int x=10, y=5; printf (“M1: x = %d, y = %d\n”, x, y); interchange (x, y); printf (“M2:
By: Lokman Chan Recursive Algorithm Recursion Definition: A function that is define in terms of itself. Goal: Reduce the solution to.
Sudeshna Sarkar, IIT Kharagpur 1 Functions : Recursion Lecture
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 15 * Recursive Algorithms.
Data Structure and Algorithms. Algorithms: efficiency and complexity Recursion Reading Algorithms.
Sudeshna Sarkar, IIT Kharagpur 1 Functions Lecture
Functions Programming Applications. Functions every C program must have a function called main program execution always begins with function main any.
1 Recursion. 2 A process by which a function calls itself repeatedly  Either directly. X calls X  Or cyclically in a chain. X calls Y, and Y calls X.
Recursion COMP x1 Sedgewick Chapter 5. Recursive Functions problems can sometimes be expressed in terms of a simpler instance of the same problem.
CS 116 Object Oriented Programming II Lecture 13 Acknowledgement: Contains materials provided by George Koutsogiannakis and Matt Bauer.
Recursion by Ender Ozcan. Recursion in computing Recursion in computer programming defines a function in terms of itself. Recursion in computer programming.
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:
1 7.Algorithm Efficiency These factors vary from one machine/compiler (platform) to another  Count the number of times instructions are executed So, measure.
Recursion.
CSE / ENGR 142 Programming I
Chapter 19: Recursion.
CMSC201 Computer Science I for Majors Lecture 20 – Recursion (Continued) Prof. Katherine Gibson Based on slides from UPenn’s CIS 110, and from previous.
Chapter 15 Recursion.
Data Structures and Programming Techniques
Towers of Hanoi Move n (4) disks from pole A to pole C
Chapter 15 Recursion.
Data Structures and Programming Techniques
Data Structures Recursion CIS265/506: Chapter 06 - Recursion.
Announcements Final Exam on August 17th Wednesday at 16:00.
Recursion "To understand recursion, one must first understand recursion." -Stephen Hawking.
Recursion Chapter 11.
Chapter 14: Recursion Starting Out with C++ Early Objects
CS201: Data Structures and Discrete Mathematics I
Announcements Final Exam on August 19th Saturday at 16:00.
Last Class We Covered Recursion Stacks Parts of a recursive function:
ICS103 Programming in C Lecture 11: Recursive Functions
ITEC324 Principle of CS III
Presentation transcript:

Sudeshna Sarkar, IIT Kharagpur 1 Functions : Recursion Lecture

Sudeshna Sarkar, IIT Kharagpur 2 Announcements Class Test – I on 7 th February, 6pm Section 1 & 2 at S-301 Section 5 & 6 at S-302

Sudeshna Sarkar, IIT Kharagpur 3 Call by value void printDouble (int x) { printf (“Double of %d “, x); x *= 2; printf (“is %d\n”, x) ; } void main () { int num=15; printDouble (num); printf (“ num = %d\n”, num); } Note : The parameter of a function can be a constant, variable, expression – anything that has a value. Only the value is passed to the function.

Sudeshna Sarkar, IIT Kharagpur 4 Recursion Def : A function is recursive if it calls itself. int rfun (int x) {... rfun (2*a) ;... } Questions : How does recursion work ? Why do I write a recursive function ?

Sudeshna Sarkar, IIT Kharagpur 5 Thinking Recursively Learning Objectives To learn to think recursively To learn how strategies for recursion involve both base cases and recursion cases To learn how to search for different ways of decomposing a problem into subproblems. To understand how to use call trees and traces to reason about how recursive programs work

Sudeshna Sarkar, IIT Kharagpur 6 Program vs Process Program = a set of instructions akin to the blueprint of an information factory Process = activity performed by computer when obeying the instructions akin to operation of a working factory can create multiple factories as needed from the same blueprint need to allocate different local variables

Sudeshna Sarkar, IIT Kharagpur 7 Factorial via Recursion /* 0! = 1! = 1, for n>1, n! = n* (n-1)! */ int factorial (int n) { int t; if (n <=1) t=1; else t = n * factorial (n-1) ; return t; }

Sudeshna Sarkar, IIT Kharagpur 8 Review : Function Basics Tracing recursive functions is apparent if you remember the basics about functions : Formal parameters and variables declared in a function is local to it. Allocated (created) on function entry De-allocated (destroyed) on function return Formal parameters initialized by copying value of actual parameter.

Sudeshna Sarkar, IIT Kharagpur 9 Factorial factorial (4) = 4 * factorial (3) = 4 * 3 * factorial (2) = 4 * 3 * 2 * factorial (1) = 4 * 3 * 2 * 1 = 24

Sudeshna Sarkar, IIT Kharagpur 10 Factorial Trace n t n t n t n t n t

Sudeshna Sarkar, IIT Kharagpur 11 int findmax (int n) { int i, num, max; scanf ("%d", &num) ; max = num; for (i=1; i<n; i++){ scanf ("%d", &num) ; if (num > max) max = num; } return max; } int findmax (int n, int max) { int num; if (n==0) return max; scanf ("%d", &num) ; if (num > max) max = num; max = findmax (n-1, max) ; return max; }

Sudeshna Sarkar, IIT Kharagpur 12 Iteration vs. Recursion Any iterative algorithm can be re-worked to use recursion, and vice-versa. Some algorithms are more naturally written with recursion. But naive applications of recursion can be inefficient.

Sudeshna Sarkar, IIT Kharagpur 13 When to use Recursion ? Problem has 1 or more simple cases. These have a straightforward non-recursive solution. Other cases can be re-defined in terms of problems that are closer to simple cases By applying this redefn process repeatedly one gets to one of the simple cases.

Sudeshna Sarkar, IIT Kharagpur 14 Example int sumSquares (int m, int n) { int i, sum; sum = 0; for (i=m; i<=n; i++) sum += i*i; return sum; }

Sudeshna Sarkar, IIT Kharagpur 15 Example int sumSquares (int m, int n) { if (m<n) /* Recursion */ return sumSquares(m, n-1) + n*n; else /* Base Case */ return n*n ; } int sumSquares (int m, int n) { if (m<n) /* Recursion */ return m*m + sumSquares(m+1, n); else /* Base Case */ return m*m ; }

Sudeshna Sarkar, IIT Kharagpur 16 Example int sumSquares (int m, int n) { int middle ; if (m==n) return m*m; else { middle = (m+n)/2; return sumSquares(m,middle) + sumSquares(middle+ 1,n) ; } m midmid+1 n

Sudeshna Sarkar, IIT Kharagpur 17 Call Tree sumSquares(5,10) sumSquares(5,7) sumSquares(5,10)sumSquares(8,10) sumSquares(5,6) sumSquares(7,7) sumSquares(8,9) sumSquares(10,10) sumSquares(5,5) sumSquares(6,6)sumSquares(8,8) sumSquares(9,9)

Sudeshna Sarkar, IIT Kharagpur 18 Annotated Call Tree sumSquares(5,10) sumSquares(5,7) sumSquares(5,10)sumSquares(8,10) sumSquares(5,6) sumSquares(7,7) sumSquares(8,9) sumSquares(10,10) sumSquares(5,5) sumSquares(6,6)sumSquares(8,8) sumSquares(9,9)

Sudeshna Sarkar, IIT Kharagpur 19 Trace sumSq(5,10) = (sumSq(5,7) + sumSq(8,10)) = (sumSq(5,6) + (sumSq(7,7)) + (sumSq(8,9) + sumSq(10,10)) = ((sumSq(5,5) + sumSq(6,6)) + sumSq(7,7)) + ((sumSq(8,8) + sumSq(9,9)) + sumSq(10,10)) = (( ) + 49) + (( ) + 100) = ( ) + ( ) = ( ) = 355

Sudeshna Sarkar, IIT Kharagpur 20 Recursion : The general idea Recursive programs are programs that call themselves to compute the solution to a subproblem having these properties : 1. the subproblem is smaller than the overall problem or, simpler in the sense that it is closer to the final solution 2. the subproblem can be solved directly (as a base case) or recursively by making a recursive call. 3. the subproblem’s solution can be combined with solutions to other subproblems to obtain the solution to the overall problem.

Sudeshna Sarkar, IIT Kharagpur 21 Think recursively Break a big problem into smaller subproblems of the same kind, that can be combined back into the overall solution : Divide and Conquer

Sudeshna Sarkar, IIT Kharagpur 22 Exercise 1. Write a recursive function that computes x n, called power (x, n), where x is a floating point number and n is a non- negative integer. 2. Write an improved recursive version of power(x,n) that works by breaking n down into halves, squaring power(x, n/2), and multiplying by x again if n is odd. 3. To calculate the square root of x (a +ve real) by Newton’s method, we start with an initial approximation a=x/2. If |x- a  a|  epsilon, we stop with the result a. Otherwise a is replaced with the next approximation, (a+x/a)/2. Write a recursive method, sqrt(x) to compute square root of x by Newton’s method.

Sudeshna Sarkar, IIT Kharagpur 23 Common Pitfalls Infinite Regress : a base case is never encountered a base case that never gets called : fact (0) running out of resources : each time a function is called, some space is allocated to store the activation record. With too many nested calls, there may be a problem of space. int fact (int n) { if (n==1) return 1; return n*fact(n-1); }

Sudeshna Sarkar, IIT Kharagpur 24 Tower of Hanoi ABC

Sudeshna Sarkar, IIT Kharagpur 25 Tower of Hanoi ABC

Sudeshna Sarkar, IIT Kharagpur 26 Tower of Hanoi ABC

Sudeshna Sarkar, IIT Kharagpur 27 Tower of Hanoi ABC

Sudeshna Sarkar, IIT Kharagpur 28 void towers (int n, char from, char to, char aux) { if (n==1) { printf (“Disk 1 : %c -> &c \n”, from, to) ; return ; } towers (n-1, from, aux, to) ; printf (“Disk %d : %c  %c\n”, n, from, to) ; towers (n-1, aux, to, from) ; }

Sudeshna Sarkar, IIT Kharagpur 29 Disk 1 : A -> C Disk 2 : A -> B Disk 1 : C -> B Disk 3 : A -> C Disk 1 : B -> A Disk 2 : B -> C Disk 1 : A -> C Disk 4 : A -> B Disk 1 : C -> B Disk 2 : C -> A Disk 1 : B -> A Disk 3 : C -> B Disk 1 : A -> C Disk 2 : A -> B Disk 1 : C -> B towers (4, ‘A’, ‘B’, ‘C’) ;

Sudeshna Sarkar, IIT Kharagpur 30 Recursion may be expensive ! Fibonacci Sequence: fib (n) = n if n is 0 or 1 fib (n) = fib (n-2) + fib(n-1) if n>= 2. int fib (int n){ if (n==0 or n==1) return 1; return fib(n-2) + fib(n-1) ; }

Sudeshna Sarkar, IIT Kharagpur 31 Call Tree fib (5) fib (3)fib (4) fib (1) fib (2)fib (1)fib (2) fib (0) fib (3) fib (1) fib (2) fib (0) fib (1)

Sudeshna Sarkar, IIT Kharagpur 32 Iterative fibonacci computation int fib (int n){ if (n <= 1) return n; lofib = 0 ; hifib = 1 ; for (i=2; i<=n; i++) { x = lofib ; lofib = hifib ; hifib = x + lofib; } return hifib ; } i = x = lofib= hifib=

Sudeshna Sarkar, IIT Kharagpur 33 Merge Sort To sort an array of N elements, 1. Divide the array into two halves. Sort each half. 2. Combine the two sorted subarrays into a single sorted array Base Case ?

Sudeshna Sarkar, IIT Kharagpur 34 Binary Search revisited To search if key occurs in an array A (size N) sorted in ascending order: mid = N/2; if (key == N/2) item has been found if (key < N/2) search for the key in A[0..mid-1] if (key > N/2) search for key in A[mid+1..N] Base Case ?