I am very new to programming in general and am having a hard time understanding this Fibonacci sequence example:
var fib = [0, 1];
for (var i = 2; i < n; i++) {
fib[ i ] = fib[ i - 1 ] + fib[ i - 2 ];
console.log(fib);
}
On the first iteration, index 2 is equal to 1, simple enough. But, when I try the second iteration with i = 3, I get:
fib[ 3 ] = fib[ 3 - 1 ] + fib[ 3 - 2 ];
fib[ 3 ] = fib[ 2 ] + fib[ 1 ];
fib[ 3 ] = fib[ 3 ];
Where am I going wrong with my thinking? So far I have:
var fib = [0,1,1,3]
which I know is not correct.
When you are reasoning about the code, you make the jump from
fib[3] = fib[2] + fib[1]tofib[3] = fib[3]. This happens to be a transformation that results in a correct statement, but it is not how it works. This code is adding the value at index2to the value at index1. That is not the same as taking the value at index3. The way this reasoning should work is as follows:You start with
fib = [0, 1]. Then in the first iteration of the loop you havefib[2] = fib[1] + fib[0]. This means that you add the value at index0(which happens to be0) to the value at index1(which happens to be1) to get the value that you put at the end of the array (1). Then in the second iteration, you do a similar thing, adding the value at index1(still1) to the value at index2(also1) to get2, which goes at the end of the array. This continues, and at each iteration you add together the last two values in the array to get the next value.In JavaScript, when using an array like
fib,fib[i]refers to theith value in this array, counting from0. Sofib[0]is the first element in the array,fib[1]is the second element in the array, and so on.