Recursion. Binary search example postponed to end of lecture.
-
date post
19-Dec-2015 -
Category
Documents
-
view
227 -
download
1
Transcript of Recursion. Binary search example postponed to end of lecture.
![Page 1: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/1.jpg)
Recursion
![Page 2: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/2.jpg)
• Binary search example postponed to end of lecture
![Page 3: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/3.jpg)
What Is Recursion?
• Recursive call – A method call in which the method being
called is the same as the one making the call
• Direct recursion – Recursion in which a method directly calls
itself
• Indirect recursion – Recursion in which a chain of two or more
method calls returns to the method that originated the chain
![Page 4: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/4.jpg)
4
Writing a recursive function to find n!
• Factorial(n) = n*n-1*n-2*…*1– Factorial(4) = 4 * 3 * 2 * 1 = 24– Factorial(0) = 1
• Another definition of Factorial(n)═ n*Factorial(n-1) if n>0═ 1 if n=0
![Page 5: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/5.jpg)
5
Recursive function
int fact(int n){ if (n==0) return 1; return n*fact(n-1);}
• Call itself• Fact(0)=1;• Parameter to
recursive call is diminished by 1– Always reach base
case if n>=0
![Page 6: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/6.jpg)
Recursion Versus Iteration
• Recursion not always ‘necessary’– Not even allowed in some languages
• Any task accomplished with recursion canalso be done without it
– Nonrecursive: called iterative, using loops
• Recursive– Runs slower, uses more storage– Elegant solution; less coding
![Page 7: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/7.jpg)
Some Definitions
• Base case – The case for which the solution can be
stated nonrecursively
• General (recursive) case – The case for which the solution is expressed
in terms of a smaller version of itself
• Recursive algorithm – A solution that is expressed in terms of
(a) smaller instances of itself and (b) a base case
![Page 8: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/8.jpg)
8
General format for many recursive functions
if (some condition for which answer is known) solution statement //base caseelse recursive function call //general case
![Page 9: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/9.jpg)
9
Recursive function
int fact(int n){ if (n==0) return 1; return n*fact(n-1);}
• Call itself• Fact(0)=1;• Parameter to
recursive call is diminished by 1– Always reach base
case if n>=0
![Page 10: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/10.jpg)
Box Method
• Activation record– Arguments– Local variables– A place holder for
value returned by recursive calls
– The return value of the function itself
Activation record for Fact(3)
![Page 11: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/11.jpg)
Box Method
![Page 12: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/12.jpg)
Box Method
![Page 13: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/13.jpg)
Box Method
![Page 14: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/14.jpg)
Summary
![Page 15: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/15.jpg)
15
Three-Question Method of verifying recursive functions
• Base-Case Question: Is there a nonrecursive way out of the function?
• Smaller-Caller Question: Does each recursive function call involve a smaller case of the original problem leading to the base case?
• General-Case Question: Assuming each recursive call works correctly, does the whole function work correctly?
![Page 16: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/16.jpg)
Example Using Recursion: Fibonacci Series
• Fibonacci series: 0, 1, 1, 2, 3, 5, 8, 13, 21 …– Each number sum of two previous
ones
• fib(n) = fib(n-1) + fib(n-2)
![Page 17: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/17.jpg)
Example Using Recursion: Fibonacci Series
long fibonacci( long n )
{
if ( n == 0 || n == 1 ) return n;
else
return fibonacci( n - 1 ) +
fibonacci( n – 2 );
}
![Page 18: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/18.jpg)
Example Using Recursion: Fibonacci Series
f( 3 )
f( 1 )f( 2 )
f( 1 ) f( 0 ) return 1
return 1 return 0
return +
+return
![Page 19: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/19.jpg)
Stacks for Recursion• A stack
– Specialized memory structure• Like stack of paper
– place new on top– remove when needed from top
– Called ‘last-in/first-out’ memory structure
• Recursion uses stacks– Each recursive call placed on stack– When one completes, last call is removed
from stack
![Page 20: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/20.jpg)
Stack Overflow• Size of stack limited• Long chain of recursive calls
continuallyadds to stack
– All are added before base case causesremovals
• If stack attempts to grow beyond limit
– Stack overflow error
• Infinite recursion always causes this
![Page 21: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/21.jpg)
Binary Search
• Recursive function to search sorted array
– Determines if item is in array, and if so:
– Where in array it is
• Breaks array in half– Determines if item in 1st or 2nd half– Then searches again just that half
![Page 22: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/22.jpg)
Pseudocode for Binary Search
true
![Page 23: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/23.jpg)
Checking the Recursion• No infinite recursion:
– Each call increases first or decreases last– Eventually first will be greater than last
• Stopping cases perform correct action:– If first > last no elements between them– If key == a[mid] correctly found!
• Recursive calls perform correct action– If key < a[mid] key in 1st half – correct call– If key > a[mid] key in 2nd half – correct
call
![Page 24: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/24.jpg)
Execution of Binary Search
![Page 25: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/25.jpg)
Efficiency of Binary Search• Extremely fast
– Compared with sequential search
• Half of array eliminated at start!– Then a quarter, then 1/8, etc.– Essentially eliminate half with each call
• For an array of 1M elements– Binary search never needs more than 20
compares!– Logarithmic efficiency O(log n)
![Page 26: Recursion. Binary search example postponed to end of lecture.](https://reader036.fdocuments.in/reader036/viewer/2022062516/56649d3e5503460f94a17659/html5/thumbnails/26.jpg)
Summary• Reduce problem into smaller instances of
same problem -> recursive solution• Recursive algorithm has two cases:
– Base/stopping case– Recursive case
• Ensure no infinite recursion• Use criteria to determine recursion
correct– Three essential properties