Recursion CS240CS 341 What is recursion a function

  • Slides: 12
Download presentation
Recursion CS-240/CS 341

Recursion CS-240/CS 341

What is recursion? • a function calls itself – • direct recursion a function

What is recursion? • a function calls itself – • direct recursion a function calls its invoker – indirect recursion f 1 f f 2

Outline of a Recursive Function function header { if (answer is known) return the

Outline of a Recursive Function function header { if (answer is known) return the answer else recursive call to solve a "smaller" problem } base case recursive case

Factorial (n) - recursive Factorial (n) = n * Factorial (n-1) Factorial (0) =

Factorial (n) - recursive Factorial (n) = n * Factorial (n-1) Factorial (0) = 1 base case (for n > 0) long factorial (int n) { if (n == 0) return 1; else return n * factorial (n-1); }

How Recursion Works • • a recursive function call is like any other function

How Recursion Works • • a recursive function call is like any other function call each function call has its own activation record (space for storing parameters and local variables) – – • • created when the function is called destroyed when the function returns to its caller activation records are stacked up as recursive calls are made when the base case is reached the recursion “unwinds”

Recursive Call Tree long factorial (int n) { if (n == 0) return 1;

Recursive Call Tree long factorial (int n) { if (n == 0) return 1; else return n * factorial (n-1); } What happens with factorial (-2)? Rec. Fact (4) 24 4 6 3 2 2 1 1 0 1

Factorial (n) - iterative Factorial (n) = n * (n-1) * (n-2) *. .

Factorial (n) - iterative Factorial (n) = n * (n-1) * (n-2) *. . . * 1 for n > 0 Factorial (0) = 1 long factorial (int n) { long fact =1; for (int i = n; i > 0; i--) fact = fact * i; return fact; }

Euclid's. Algorithm • Finds the greatest common divisor of two nonnegative integers that are

Euclid's. Algorithm • Finds the greatest common divisor of two nonnegative integers that are not both 0 • Recursive definition of gcd algorithm – gcd (a, b) = a (if b is 0) – gcd (a, b) = gcd (b, a % b) (if b != 0) • Write a recursive gcd function – prototype? – implementation?

Tracing gcd (54, 30) int gcd (int a, int b) { if (b ==

Tracing gcd (54, 30) int gcd (int a, int b) { if (b == 0) return a; else return gcd (b, a % b); } 54, 30 30, 24 24, 6 6, 0 6 6

Iterative gcd? int gcd (int a, int b) { int temp; while (b !=

Iterative gcd? int gcd (int a, int b) { int temp; while (b != 0) { temp = b; b = a % b; a = temp; } return a; }

Another recursive definition Fibonacci numbers are the sequence of integers: 0, 1, 1, 2,

Another recursive definition Fibonacci numbers are the sequence of integers: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …. fib (0) = 0 fib (1) = 1 fib (n) = fib (n – 1) + fib (n – 2) (for n >= 2) int fib (int n) { if (n <= 1) return n; else return fib (n – 1) + fib (n – 2); }

Tracing fib(5) 5 5 3 2 4 2 3 1 2 2 1 1

Tracing fib(5) 5 5 3 2 4 2 3 1 2 2 1 1 0 1 1 2 0 0 1 1 0 0