Find n th fibonacci iteratively - illustrated walkthrough

Preview:

DESCRIPTION

A step-by-step illustration of Find n-th Fibonacci function to help you walk through a series of operations. Illustration is accompanied by actual code with bold line indicating the current operation. https://github.com/yoshiwatanabe/Algorithms/blob/master/Finding/Fibonacci.cs

Citation preview

Find n-th Fibonacci iteratively

Illustrated walk through

public static long FindNthFibonacciIterative(int n){ if (n == 0) return 0; if (n == 1) return 1;

long fibNMinusTwo = 0; long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i) { fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN; }

return fibN;}

0 1 ? ? ? ? ?

[0] [1] [2] [3] [4] [5] [6]

if (n == 0) return 0;if (n == 1) return 1;

when n == 0

0 1 ? ? ? ? ?

[0] [1] [2] [3] [4] [5] [6]

if (n == 0) return 0;if (n == 1) return 1;

when n == 1

Let’s just get over with two special cases

Always return 0

Always return 1

0 1 ? ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

[0] [1] [2] [3] [4] [5] [6]

0 1 ? ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

when n == 6

0 1 0 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

0 1 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

n == 6

i = 2

0

0 1 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

2 <= 6 is true0

i = 2

n == 6

0 1 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

1+

i = 2

n == 6

2nd Fibonacchi is 1

1 1 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

1

i = 2

n == 6

1 1 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

1

i = 2

n == 6

1 1 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

1

i = 3

n == 6

1 1 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

1 3 <= 6 is true

i = 3

n == 6

1 1 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

2+

i = 3

n == 6

3nd Fibonacchi is 2

3ed fib.

1 1 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

2

i = 3

n == 6

1 2 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

2

i = 3

n == 6

1 2 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

2

i = 4n == 6

1 2 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

2

i = 4

n == 6

4 <= 6 is true

1 2 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

3

i = 4

n == 6

+

4-th Fibonacchi is 3

2 2 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

3

i = 4

n == 6

2 3 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

3

i = 4

n == 6

2 3 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

3

i = 5n == 6

2 3 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

3

i = 5

n == 6

5 <= 6 is true

2 3 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

5

i = 5

n == 6

+

5-th Fibonacchi is 5

3 3 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

5

i = 5

n == 6

3 5 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

5

i = 5

n == 6

3 5 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

5

i = 6n == 6

3 5 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

5

i = 6

n == 6

6 <= 6 is true

3 5 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

8

i = 6

n == 6

+

6-th Fibonacchi is 8

5 5 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

8

i = 6

n == 6

5 8 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

8

i = 6

n == 6

5 8 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

8

i = 7

n == 6

5 8 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

8

i = 7

n == 6

7 <= 6 is false

5 8 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibNMinusTwo fibNMinusOne fibN

8

i = 7

n == 6

Exit the for loop

5 8 ? ? ? ?

long fibNMinusTwo = 0;long fibNMinusOne = 1; long fibN = 0;

for (int i = 2; i <= n; ++i){ fibN = fibNMinusOne + fibNMinusTwo;

fibNMinusTwo = fibNMinusOne; fibNMinusOne = fibN;}

return fibN;

fibN

8

i = 7

n == 6

Return fibN = 8

fibNMinusTwo fibNMinusOne

6-th Fibonacchi is 8

Recommended