June 18, 2015IAT 2651 Recursion
June 18, 2015IAT 2652 Today’s Excitement Recursion
June 18, 2015IAT 2653 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 ); }
June 18, 2015IAT 2654 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 ); }
June 18, 2015IAT 2655 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 ); }
June 18, 2015IAT 2656 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 ); }
June 18, 2015IAT 2657 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 ); }
June 18, 2015IAT 2658 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
June 18, 2015IAT 2659 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 ); }
June 18, 2015IAT 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 ); }
June 18, 2015IAT 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
June 18, 2015IAT 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 ); }
June 18, 2015IAT 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 ); }
June 18, 2015IAT Calling Itself Let’s step through what happens. factorial(3); 6
June 18, 2015IAT 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
June 18, 2015IAT Web Crawling HTML reader called parsePage() –Reads HTML –Finds links –Per Link it should Call parsePage()
June 18, 2015IAT Web Crawling
June 18, 2015IAT Web Crawling
June 18, 2015IAT 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
June 18, 2015IAT Recursion Remember—base cases prevent infinite cats.