Run the following program and keep track of how you came to your solution. Explain your solution.

```javascript
function fibonacciNew(num) {
    if(num < 2) {
        return num;
    }
    else {
        return fibonacciNew(num-1) + fibonacciNew(num - 2);
    }
}

fibNew(4)
```
I started by trying to calculate `n` when given `f(0)=0, f(1)=1`, and I got stuck at a certain point. After some thinking, I realized that if we can find a formula for `f(n+2)-f(n),` then we can use it to recursively calculate `f(n).` So, I decided to try writing a function to do this.

The first step was to figure out what value we would return if we only had two numbers in our Fibonacci sequence. We could just look at the first few values: 0, 1, 1, 2, 3, 5, 8, 13, 21... Each number is obtained by adding the previous two numbers in the sequence. Since there are only two numbers, each sum will be either zero or one.

So, when we're given an even number, we can just return its sum with itself (i.e., 0+0=0 and 1+1=2). When we're given an odd number, we need to add two copies of ourselves to get the correct result. For example, when given 3, we'd return 6+6=12.

With these rules in place, we can write a recursive function to calculate any nth Fibonacci number using the formula above. Here's the implementation:

```js
function fibonacci(n) {
  if (n === 0 || n === 1) {
    return n;
  } else if (n % 2 === 0) {
    return fibonacci(n - 1) + fibonacci(n - 2);
  } else {
    return fibonacci(n - 1) + fibonacci(n - 2) + fibonacci(n - 3);
  }
}
```

This implementation works by checking whether the input n is divisible by 2 or not, and depending on that, returning the appropriate answer based on the rule I mentioned earlier. If neither condition applies, it calls itself until it finds the correct answer.