comp 245 data structures recursion. what is recursion? a problem solving concept which can be used...

Post on 16-Jan-2016

212 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Comp 245Data Structures

Recursion

What is Recursion?

A problem solving concept which can be used with languages that support the dynamic allocation of memory.

In programming, it is the ability for a function to call itself!

The concept has it’s foundation in mathematics.

The Factorial Function

5! = 5 * 4 *3 * 2 * 1 = 120 5! = 5 * 4! = 5 * 4 * 3! = … Definition

Coding the Factorial FunctionITERATIVELY

float Fact (int N)

{

float product = 1;

for (int i = 1; i <= N; i++)

product = product * i;

return product;

}

Coding the Factorial FunctionRECURSIVELY

float Fact (int N){

//Anchor Pointif ((N == 0) || (N == 1))

return 1;else

//Recursive Call – approaches anchor

return N * Fact(N – 1);}

Two Requirements for Recursive Code

There must be an anchor point. (Sometimes this is called the base case.)

Each recursive call must approach the anchor point (or base case).

A Walkthru of Recursive Code

Run Time Stack Winding and Unwinding the stack Local variables, parameters, return

values stored on the stack

Advantage/Disadvantage of Recursion

ADVANTAGEUsually a more concise coding solution,

some solutions are more easily implemented using recursion

DISADVANTAGELess efficient due to overhead involved with

function calls.

The Fibonacci Number Sequence

The Italian mathematician Leonardo Fibonacci discovered this sequence which is evident in nature. He discovered the sequence while researching the breeding of rabbits.

The sequence is as follows:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, … (and so on)

We define the sequence as follows:Fib(0) = 0Fib(1) = 1Fib(N) = Fib(N-2) + Fib(N-1)

How would Fib(4) be defined?

Fib(4) – Part I

Fib(4)

Fib(3) Fib(2)

Fib(2) Fib(1) Fib(1) Fib(0)

Fib(1) Fib(0)

Coding the Fibonacci FunctionRecursively

int Fib (int N)

{

if ((N==0) || (N==1))

return N;

else

return Fib(N-1) + Fib(N-2);

}

top related