200 likes | 280 Views
IAT 800. Recursion. Today’s Excitement. Recursion. Recursion. Recursion basically means calling a method from inside itself. int factorial (int n) { if( n > 1 ) { return( n* factorial ( n-1 ) ); } else return( 1 ); }. Calling Itself.
E N D
IAT 800 Recursion IAT 800
Today’s Excitement • Recursion IAT 800
Recursion • Recursion basically means calling a method from inside itself. int factorial(int n) { if( n > 1 ) { return( n* factorial( n-1 ) ); } else return( 1 ); } IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } int factorial(int n) (n=2) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } int factorial(int n) (n=2) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } int factorial(int n) (n=1) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } int factorial(int n) (n=2) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } int factorial(int n) (n=1) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } int factorial(int n) (n=2) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } 1 IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } int factorial(int n) (n=2) { if(n > 1) { return( n* 1 ); } else return( 1 ); } IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } int factorial(int n) (n=2) { if(n > 1) { return( 2* 1 ); } else return( 1 ); } IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( n* factorial( n-1 ) ); } else return( 1 ); } 2 IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( n* 2 ); } else return( 1 ); } IAT 800
Calling Itself • Let’s step through what happens. factorial(3); int factorial(int n) (n=3) { if(n > 1) { return( 3* 2 ); } else return( 1 ); } IAT 800
Calling Itself • Let’s step through what happens. factorial(3); 6 IAT 800
Base Case • Must have Base Case • A case or condition that returns without further recursion • Stops the recursive chain • Eg factorial( int n ) • Returned 1 when n = 1 • In every other call, n decreases by 1 IAT 800
Web Crawling • HTML reader called parsePage() • Reads HTML • Finds links • Per Link it should • Call parsePage() IAT 800
Web Crawling 1 2 5 4 3 IAT 800
Web Crawling 1 6 2 5 4 3 7 11 13 15 10 14 9 8 12 IAT 800
Web Crawling • What base case? • Count the number of recursive calls so far • Place a limit on depth • Explore no further after depth 4 • Example stopped at depth 2 IAT 800
Recursion Remember—base cases prevent infinite cats.http://infinitecat.com/ IAT 800