Algorithmic Recursion. Recursion Alongside the algorithm, recursion is one of the most important and...
-
Upload
aron-griffin -
Category
Documents
-
view
217 -
download
1
Transcript of Algorithmic Recursion. Recursion Alongside the algorithm, recursion is one of the most important and...
Algorithmic Algorithmic RecursionRecursion
RecursionRecursionAlongside the algorithm, recursion is one of the Alongside the algorithm, recursion is one of the
most important and fundamental concepts in most important and fundamental concepts in computer science as well as many areas of computer science as well as many areas of mathematics.mathematics.
Recursive solutions to problems tend beRecursive solutions to problems tend be simplesimple eloquenteloquent conciseconcise
Definition:Definition:
A recursive algorithm is one that calls or A recursive algorithm is one that calls or refers to itself within its algorithmic body.refers to itself within its algorithmic body.
Like other iterative constructs such as Like other iterative constructs such as the the FORFOR loop and the loop and the WHILEWHILE loop a loop a particular condition needs to be met particular condition needs to be met that prevents the algorithm from that prevents the algorithm from executing indefinitely.executing indefinitely.
In recursive algorithms this condition is In recursive algorithms this condition is called the called the basebase or or end caseend case..
The base case usually represents a The base case usually represents a lower bound on the number of times lower bound on the number of times the recursive algorithm will call itself.the recursive algorithm will call itself.
A recursive algorithm normally expects A recursive algorithm normally expects INPUT parameters and returns a INPUT parameters and returns a single RETURN value.single RETURN value.
Each subsequent recursive call of the Each subsequent recursive call of the algorithm should pass INPUT algorithm should pass INPUT parameters that are closer to the base parameters that are closer to the base casecase
Recursion ExampleRecursion ExampleThe The Fibonacci SequenceFibonacci Sequence is powerful integer is powerful integer
number sequence which has many number sequence which has many applications in mathematics, computer applications in mathematics, computer science and even nature ( the science and even nature ( the arrangements of flower petals, spirals in arrangements of flower petals, spirals in pine cones all follow the Fibonacci pine cones all follow the Fibonacci sequence ).sequence ).
The Fibonacci sequence is defined as follows:The Fibonacci sequence is defined as follows:
Fib(n) = Fib(n-1) + Fib(n-2) where N > 1Fib(n) = Fib(n-1) + Fib(n-2) where N > 1 Fib(0) = Fib(0) = Fib(1) = 1Fib(1) = 1
The first ten terms in the sequence are The first ten terms in the sequence are 1,1,2,3,5,8,13,21,33,541,1,2,3,5,8,13,21,33,54
{Module to compute the n{Module to compute the nthth term in the term in the Fibonacci sequence}Fibonacci sequence}
Module Name: FibModule Name: FibInput: nInput: nOutput: nOutput: nthth term in sequence term in sequenceProcess:Process: IF (n<=1) {base condition}IF (n<=1) {base condition} THENTHEN RETURN 1RETURN 1 ELSE {recursive call}ELSE {recursive call} RETURN Fib(n-1) + Fib(n-2)RETURN Fib(n-1) + Fib(n-2) ENDIF ENDIF
Fibonacci Sequence Module
ComputeComputefib_5 Fib(5)fib_5 Fib(5)
Fib(5)Fib(5)
Fib(4) + Fib(3)Fib(4) + Fib(3)
Fib(3) + Fib(2) Fib(2) + Fib(1)Fib(3) + Fib(2) Fib(2) + Fib(1)
Fib(2) + Fib(1) Fib(1) + Fib(0) Fib(1) + Fib(0)Fib(2) + Fib(1) Fib(1) + Fib(0) Fib(1) + Fib(0)
Fib(1) + Fib(0)Fib(1) + Fib(0)
= 1+1+1+1+1+1+1+1 = 8= 1+1+1+1+1+1+1+1 = 8
When looking at recursive solution When looking at recursive solution to a problem we try to identify to a problem we try to identify two main characteristics:two main characteristics:
1.1. Can we identify a solution where Can we identify a solution where the solution is based upon the solution is based upon solving a simpler problem of solving a simpler problem of itself each time.itself each time.
2.2. Can we identify a base case Can we identify a base case where the simpler solutions where the simpler solutions stop.stop.
Most recursive modules (functions) Most recursive modules (functions) take the following form:take the following form:
IF ( base case ) IF ( base case ) THENTHEN
RETURN base_case RETURN base_case solutionsolution
ELSEELSE RETURN recursive RETURN recursive
solutionsolution ENDIFENDIF
Example:Example: Evaluate x Evaluate xyy recursively recursively
Firstly we need to answer the two Firstly we need to answer the two questions.questions.
(1)(1) Answer yesAnswer yes
xxyy = x * x = x * xy-1y-1
(2)(2) Answer yesAnswer yes
xx00 = 1 = 1
{ Module to compute x{ Module to compute xyy recursively } recursively }Module Name: powerModule Name: powerInput: x,yInput: x,yOutput: x to the power of yOutput: x to the power of yProcess:Process: IF (y=0) {base condition}IF (y=0) {base condition} THENTHEN RETURN 1RETURN 1 ELSE {recursive call}ELSE {recursive call} RETURN x*power(x,y-1)RETURN x*power(x,y-1) ENDIFENDIF
xy Recursive Module
Example:Example: Triangular valuesTriangular values
Design an iterative algorithm to read a number from a Design an iterative algorithm to read a number from a user and print it’s triangular value.user and print it’s triangular value.
( ( if the number 5 is input its triangular value is if the number 5 is input its triangular value is 5+4+3+2+1 = 155+4+3+2+1 = 15 ) )
{Print triangular value of input number}{Print triangular value of input number}PRINT “Enter a number “PRINT “Enter a number “READ numberREAD numbertriangular_value triangular_value 0 0FOR ( value FROM 1 TO number )FOR ( value FROM 1 TO number ) triangular_value triangular_value triangular_value + triangular_value +
valuevalueENDFORENDFOR
PRINT triangular_valuePRINT triangular_value
Now design a recursive module to solve the same Now design a recursive module to solve the same problem.problem.
Step 1 – Answer questionsStep 1 – Answer questions
(1) Yes - tri(n) = n + tri(n-1)(1) Yes - tri(n) = n + tri(n-1)(2) Yes - n = 1(2) Yes - n = 1
Algorithm:Algorithm:
Module Name: triModule Name: triInputs:Inputs: n nOutputs: triangular value of nOutputs: triangular value of nProcess:Process:
IF ( n = 1 )IF ( n = 1 )
THENTHEN /* Base Case *//* Base Case */
RETURN 1 RETURN 1
ELSEELSE /* /* Recursive solution */Recursive solution */
RETURN n + tri(n-1)RETURN n + tri(n-1)
ENDIFENDIF