Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Recursion Overview l Introduction to recursion and recursive methods l Simple popular recursive algorithms l Writing recursive methods l Preview: 1-D.

Similar presentations


Presentation on theme: "1 Recursion Overview l Introduction to recursion and recursive methods l Simple popular recursive algorithms l Writing recursive methods l Preview: 1-D."— Presentation transcript:

1 1 Recursion Overview l Introduction to recursion and recursive methods l Simple popular recursive algorithms l Writing recursive methods l Preview: 1-D array

2 2 Recursion l We saw earlier that a method could call another method and this could lead to a series of frames created on the stack. l In fact there is nothing preventing a method to call itself, or call another method which lead to calling the first method. Such a method is called a recursive method. l Recursion or Iteration? Recursion and iteration are alternative ways of expressing repetition in a program. In recursion, a process is made to repeat by having a method call itself. A selection statement is used to control the repeated calls. Which is better to use- recursion or iteration? There no simple answer to this question.. The choice usually depends on two issues: efficiency and the nature of the problem being solved Historically, the quest for efficiency, in terms of both execution speed and memory usage, has favored iteration over recursion.Each time a recursive call is made, the system must allocate stack space for all parameters anlocal variables. The overhead involved in any method cal is time consuming.. However, studies have shown that on modern, fast computers, the overhead of recursion is often so small that the increase in computation time is almost unnoticeable to the user. The choice between recursion and iteration more often depends on the the nature of the problem being solved

3 3 Steps to solve a recursive Problem l 1- Try to express the problem as a simpler version of itself l 2- Determine the stopping cases(base case) l 3-Determine the recursive steps(recursive case) Stopping case: the statement that causes recursion to terminate Recursive step: the step in a program or algorithm that contains a recursive call. Example:The factorial function n!=n*(n-1)*(n-2)*….*1 RecursiveIterative public static int factorial(int num ){ if (num = = 0) return 1; else return num * factorial(num-1); } public static int factorial(int num) { int i, product=1; for(i=num;i>1;i--) product=product *i; return product; }

4 4 public static int factorial(int num) { if (num = = 0) return 1; else return num*factorial(num-1); }

5 5 Recursion: The Factorial Function l The factocial function is defined as: n! = n*(n-1)*(n-2)*…*1 import java.io.*; class Factorial2 { public static int factorial(int num) { if (num == 0) return 1; else return num*factorial(num-1); } public static void main (String[] args) throws IOException { BufferedReader stdin= new BufferedReader( new InputStreamReader(System.in)); int n, answer; System.out.println("Enter an integer:"); n=Integer.parseInt(stdin.readLine()); answer = factorial(n); System.out.println("The factorial of " + n + " is " + answer); }

6 6 Recursion: Sample Execution Trace l Factorial: A Sample Trace factorial (6) = =(6*Factorial(5)) =(6*(5*Factorial(4))) =(6*(5*(4*Factorial(3)))) =(6*(5*(4*(3*Factorial(2))))) =(6*(5*(4*(3*(2*Factorial(1)))))) =(6*(5*(4*(3*(2*1))))) =(6*(5*(4*(3*2)))) =(6*(5*(4*6))) =(6*(5*24)) =(6*120) =720

7 7 Recursion: sumOfSquares l sumOfSquares: Specified as: sumSquares(m,n)=m^2+(m+1)^2+(m+2)^3+…+n^2 import java.io.*; class SumOfSquares { static int sumSquares(int from,int to) { if (from < to) return from*from + sumSquares(from+1,to); else return from*from; }

8 8 Recursion: sumOfSquares (cont.) l sumOfSquares (continued) public static void main (String[] args) throws IOException { BufferedReader stdin= new BufferedReader( new InputStreamReader(System.in);); int from, to, answer; System.out.println("Enter the smaller"); String input=stdin.readLine(); from = Integer.parseInt(input); System.out.println("Enter the bigger"); input=stdin.readLine(); to = Integer.parseInt(input); answer = sumSquares(from,to); System.out.println("Sum of Squares from "+ from + " to " +to+" is "+ answer); }

9 9 Recursion: sumOfSquares Execution Trace sumSquares: A Sample Trace sumSquares (5,10) = =(25+sumSquares(6,10)) =(25+(36+sumSquares(7,10))) =(25+(36+(49+sumSquares(8,10)))) =(25+(36+(49+(64+sumSquares(9,10))))) =(25+(36+(49+(64+(81+(sumSquares(10,10))))))) =(25+(36+(49+(64+(81+100))))) =(25+(36+(49+(64+181)))) =(25+(36+(49+245))) =(25+(36+294)) =(25+330) =355 static int sumSquares( int from,int to ) { if (from < to) return from*from + sumSquares(from+1,to); else return from*from; }

10 10 Recursion: The Fibonacci Function l The famous Fibonacci function is defined as fib 0 = 1 fib 1 = 1 fib n = fib(n-1)+fib(n-2), n>=2. i.e. except for f0 and f1, every element is the sum of its previous two elements 0, 1,1,2, 3, 5, 8, 13, 21, 34,………… RecursiveIterative class Fibonacci { static int fibonacci (int num) { if (num == 0 || num == 1) return 1; else return (fibonacci(num-1)+fibonacci(num-2)); } static int fibonacci (int num) { int i, fib1=0,fib2=1,currentFib=0; if(num<=1) return num; else { for(i=1;i<=num;i++) { currentFib=fib1+fib2; fib1=fib2; fib2=currentFib; } return currentFib; }}

11 11 Fibonacci class Fibonacci { static int fibonacci (int num) { if (num == 0 || num == 1) return 1; else return (fibonacci(num-1)+fibonacci(num-2)); } 0, 1,1,2, 3, 5, 8, 13, 21, 34,…………

12 12 Recursion: The Fiboacci Function Fibonacci import java.io.*; class Fibonacci { static int fibonacci (int num) { if (num == 0 || num == 1) return 1; else return (fibonacci(num-1) + fibonacci(num-2)); } public static void main (String[] args) throws IOException { BufferedReader stdin= new BufferedReader( new InputStreamReader(System.in)); int n, answer; System.out.println("Enter an integer:"); String input=stdin.readLine(); n = Integer.parseInt(input); answer = fibonacci(n); System.out.println("The "+n+ "th Fibonacci number is: "+ answer); }

13 13 Simple Recursive Algorithms (cont.) l Exercises: Write complete recursive programs for the following algorithms 1 power(x,y) that implements x^y using repeated additions and without using multiplication. Assume x to be a floating point value and y to be a nonnegative integer. 2 gcd(m,n) that implements the Euclid’s algorithm of finding the greatest common divisor of m and n. Assume m and n to be positive integers. 3. isPalindrome() which given a string prints an informative error message saying whether or not the given string is a palindrome (reads the same when read from left to right or from right to left).


Download ppt "1 Recursion Overview l Introduction to recursion and recursive methods l Simple popular recursive algorithms l Writing recursive methods l Preview: 1-D."

Similar presentations


Ads by Google