Module 01 Stack and Recursion
-
Upload
tushar-b-kute -
Category
Software
-
view
651 -
download
1
description
Transcript of Module 01 Stack and Recursion
See through C
Module 1
Stack and Recursion
Tushar B Kutehttp://tusharkute.com
Overview
Subjects:
• Stacks– Structure
– Methods
– Stacks and Method – Calls
• Recursion– Principle
– Recursion and Stacks
– Examples
Stack: PropertiesAnswer:
They both provide LIFO (last in first out) Structures
12345
6
123456
Stacks: PropertiesPossible actions:
• PUSH an object (e.g. a plate) onto dispenser
• POP object out of dispenser
Stacks: DefinitionStacks are LIFO structures, providing
• Add Item (=PUSH) Methods
• Remove Item (=POP) Methods
They are a simple way to build a collection
• No indexing necessary
• Size of collection must not be predefined
• But: extremely reduced accessibility
A look into the JVM1 int main( ) {
2 int a = 3;
3 int b = times(a);
4 printf(“%d“, b);
5 }
6 int times(int a) {
7 int b = 5;
8 int c = a * b;
9 return (c);
10 }a = 3
a = 3
b
Return to LINE 3
b = 5
c = 15
A look into the compiler...
9 return (c);
10 ...
a = 3
a = 3
b
Return to LINE 3
b = 5
c = 15
15
a = 3
b
Return to LINE 3
a = 3
b
c = 15
Return to LINE 3
Temporary storage
Clear Stack
A look into the CompilerA look into the 1 int main() {
2 int a = 3;
3 int b = times(a);
4 printf(“%d“, b);
5 }
a = 3
b
c = 15
Temporary storage
a = 3
b = 15
A look into the CompilerA look into the 1 int main() {
2 int a = 3;
3 int b = times(a);
4 printf(“%d“, b);
5 }
clear stack from local variables
A look into the CompilerA look into the Important:
Every call to a function creates a new set of local variables !
These Variables are created on the stack and deleted when the function returns
Applications using a Stack
Examples:
• Finding Palindromes
• Bracket Parsing
• RPN
• RECURSION !
RecursionRecursion
RecursionRecursion
• Sometimes, the best way to solve a problem is by solving a smaller version of the exact same problem first
• Recursion is a technique that solves a problem by solving a smaller problem of the same type
• A function that is defined in terms of itself
RecursionRecursion
When you turn that into a program, you end up with functions that call themselves:
Recursive Functions
RecursionRecursion
int fact (int a){
if (a==1) return(1);else return (a * fact( a-1));
}
It computes f! (factorial)
What’s behind this function ?
Factorial:
a! = 1 * 2 * 3 * ... * (a-1) * a
Note:
a! = a * (a-1)!
remember:
...splitting up the problem into a smaller problem of the same type...
a!
a * (a-1)!
Factorial
int factorial(int a){if (a==0) return(1);else return(a * factorial( a-1));
}
Tracing the example
int factorial (int a){if (a==1) return(1);else return(a * factorial( a-1));
}
Watching the Stack
a = 5 a = 5 a = 5Return to L4
a = 4Return to L4
a = 4Return to L4
a = 3Return to L4
a = 2Return to L4
a = 1
Initial After 1 recursion After 4th recursion
…
Every call to the method creates a new set of local variables !
int factorial(int a){if (a==1) return(1);else return(a * factorial( a-1));
}
Watching the Stack
a = 5Return to L4
a = 4Return to L4
a = 3Return to L4
a = 2Return to L4
a = 1
After 4th recursion
a = 5Return to L4
a = 4Return to L4
a = 3Return to L4a = 2*1 = 2
a = 5Return to L4
a = 4Return to L4a = 3*2 = 6
a = 5Return to L4a = 4*6 = 24
a = 5*24 = 120
Result
Problems that can be solved by recursion have these characteristics:
• One or more stopping cases have a simple, nonrecursive solution
• The other cases of the problem can be reduced (using recursion) to problems that are closer to stopping cases
• Eventually the problem can be reduced to only stopping cases, which are relatively easy to solve
Follow these steps to solve a recursive problem:
• Try to express the problem as a simpler version of itself
• Determine the stopping cases
• Determine the recursive steps
Properties of Recursive Functions
The recursive algorithms we write generally consist of an if statement:
IF
the stopping case is reached solve it
ELSE
split the problem into simpler cases using recursion
Solution
Solution on stackSolution on stack
Solution on stack
Recursion does not terminate properly: Stack Overflow !
Common Programming Error
Examples: Fractal Tree
http://id.mind.net/~zona/mmts/geometrySection/fractals/tree/treeFractal.html
Examples: The 8 Queens Problem
http://mossie.cs.und.ac.za/~murrellh/javademos/queens/queens.html
Eight queens are to be placed on a chess board
in such a way that no queen checks against
any other queen
Thank you
This presentation is created using LibreOffice Impress 3.6.2.2