Recursion help needed

I have this piece of code below, a function that gives us the first n Fibonacci numbers.

However, even after trying to substitute, I cannot understand what is happening at the ‘else’ part of the function.

Could anyone explain it please?

function fibonacci(n) {
  if (n === 1) {
    return [0,1];
  } else {
    var counter = fibonacci(n - 1);
    counter.push(counter[counter.length - 1] + counter[counter.length - 2]);
    return counter;

Welcome, D4.

I’ve edited your post for readability. When you enter a code block into a forum post, please precede it with a separate line of three backticks and follow it with a separate line of three backticks to make it easier to read.

See this post to find the backtick on your keyboard. The “preformatted text” tool in the editor (</>) will also add backticks around text.

Note: Backticks are not single quotes.


Also, here is a potentially useful discussion on the topic of recursion: Replace Loops using Recursion -1 explanation

Hope this helps

Hello Sky020,

Thanks for your quick response, I’ll be careful with the markdown next time!

I have read the thread that you provided and it is all clear for me (it might have been an easier example), but I still struggle to understand what is happening here exactly in this particular case.

counter[counter.length - 1] is the n - 1st element and counter[counter.length - 2] is the n - 2nd element.

My guess of what I do not understand is, how does var counter work after we assign fibonacci(n - 1) to it.

Where is the result sequence stored until we get to the ‘n’-th element?

fibonacci() returns an array.
var counter = fibonancci(n-1) will be an array.
The next line pushes another value to the array.
Then that array is returned.