// Опишем вашу функцию как есть
// f(n) = f(n - 1) + f(n - 2) + ... + f(n-n)
const f = n => {
if (n < 3) return n
for ( var i=1, x = 0; i <= n; i++ )
x += f(n-i)
return x
}, // смотрим 10 результатов вычислений и видим ярковыраженную последовательность
//Понимая что итерации здесь избыточны, выводим формулу:
fn = n => n < 4 ? n : 3 * (2 ** (n-3))
// проверяем
let i = 1;
while (++i < 1000)
if (f(i) !== fn(i))
throw new Error('Where is my mind? %`')
console.log('finished')
upd: если функция f(n) = f(n-1) + f(n-2) + f(n-3)
var numbers = [0,1,2], // кэш чисел для оптимизации повторных вычислений
f = n => {
for (let i = numbers.length; i <= n; i++)
numbers.push(numbers[i-1] + numbers[i-2] + numbers[i-3])
return numbers[n]
}