Presentation is loading. Please wait.

Presentation is loading. Please wait.

4.4 Recursive Algorithms A recursive algorithm is one which calls itself to solve “smaller” versions of an input problem. How it works: – The current status.

Similar presentations


Presentation on theme: "4.4 Recursive Algorithms A recursive algorithm is one which calls itself to solve “smaller” versions of an input problem. How it works: – The current status."— Presentation transcript:

1 4.4 Recursive Algorithms A recursive algorithm is one which calls itself to solve “smaller” versions of an input problem. How it works: – The current status of the algorithm is placed on a stack. A stack is a data structure from which entries can be added and deleted only from one end. 1

2 like the plates in a cafeteria: PUSH: put a 'plate' on the stack. POP: take a 'plate' off the stack. When an algorithm calls itself, the current activation is suspended in time and its parameters are PUSHed on a stack. The set of parameters need to restore the algorithm to its current activation is called an activation record. 2

3 Example: procedure factorial (n) /* make the procedure idiot proof */ if n < 0 return 'error' if n = 0 then return 1 else return n factorial (n-1) Algorithm 1 A Recursive Algorithm for Computing n! procedure factorial (n: nonnegative integers) if n=0 then factorial(n) :=1 else factorial(n) := n . factorial(n-1) 3

4 The operating system supplies all the necessary facilities to produce: factorial (3): PUSH 3 on stack and call factorial (2): PUSH 2 on stack and call factorial (1): PUSH 1 on stack and call factorial (0): return 1 POP 1 from stack and return (1) (1) POP 2 from the stack and return (2) [(1) (1)] POP 3 from the stack and return (3) [(2) [(1) (1)]] Complexity: Let f(n) be the number of multiplications required to compute factorial (n). f(0) = 0: the initial condition f(n) = 1 + f(n-1): the recurrence equation 4

5 Hw :example 2 (p.312) Give a recursive algorithm for computing a n, where a is a nonzero real number and n is a nonnegative integer. Example: A recursive procedure to find the max of a nonvoid list. Assume we have a built-in functions called – Length which returns the number of elements in a list – Max which returns the larger of two values – Listhead which returns the first element in a list – Remain which returns the remainder of the list Max requires one comparison. 5

6 procedure maxlist (list) /* strip off head of list and pass the remainder */ if Length(list) = 1 then return Listhead(list) else return Max( Listhead(list), maxlist (Remain (list))) The recurrence equation for the number of comparisons required for a list of length n, f(n), is f(1) = 0 f(n) = 1 + f(n-1) 6

7 Example: If we assume the length is a power of 2: – We divide the list in half and find the maximum of each half. – Then find the Max of the maximum of the two halves. procedure maxlist2 (list) /* a divide and conquer approach */ if Length (list) = 1 then return Listhead(list) else a = maxlist2 (fist half of list) b = maxlist2 (second half of list) return Max{a, b} 7

8 Recurrence equation for the number of comparisons required for a list of length n, f(n), is f(1) = 0 f(n) = 2 f(n/2) + 1 There are two calls to maxlist each of which requires f(n/2) operations to find the max. There is one comparison required by the Max function. 8

9 Recursion and Iteration Algorithm 7 A Recursive Algorithm for Fibonacc Numbers. procedure fibonacci (n: nonnegative integers) if n=0 then fibonacci(0) :=0 else if n=1 then fibonacci(1) :=1 else fibonacci(n) := fibonacci(n-1) + fibonacci(n-2) Algorithm 8 An Iterative Algorithm for Computing Fibonacci Numbers. procedure iterative fibonacci (n: nonnegative integers) if n=0 then y :=0 else begin x :=0 y :=1 for i :=2 to n begin z :=x+y x :=y y :=z end End {z is the nth Fibonacci number} 9

10 Recursive Algorithm for Fibonacci Number 10

11 The Merge Sort Example 9: Sort the list 8, 2, 4, 6, 9, 7, 10, 1, 5, 3 using the merge sort. Algorithm 9 A Recursive Merge Sort. Procedure mergesort(L= a 1,..., a n ) If n=1 then return L If n> 1 then Begin m :=  n/2  L 1 := a 1, a 2,...,a m L 2 := a m+1, a m+2,..., a n return merge(mergesort(L 1 ), mergesort(L 2 )) End {The return value is now sorted into nondecreasing order} 11

12 FIGURE 2 The Merge Sort of 8,2,4,6,9,7,10,1,5,3. 12

13 13


Download ppt "4.4 Recursive Algorithms A recursive algorithm is one which calls itself to solve “smaller” versions of an input problem. How it works: – The current status."

Similar presentations


Ads by Google