const time = f => {
const s = Date.now()
try {
const res = f()
console.log(`res: ${res}, time: ${Date.now() - s}`)
} catch(ex) {
console.log(`error: ${ex.toString()}, time: ${Date.now() - s}`)
}
}
const fib1 = n =>
n <= 1 ? n : fib1(n - 1) + fib1(n - 2)
time(_ => fib1(42))
const fib2 = (n) => {
const go = (n, a, b) =>
n === 0 ? b : go(n - 1, a + b, a)
return go(n, 1, 0)
}
time(_ => fib2(42))
const sum1 = n =>
n === 0 ? 0 : n + sum1(n - 1)
time(_ => sum1(100000))
const sum2 = n => {
const go = (n, a) =>
n === 0 ? a : go(n - 1, a + n)
return go(n, 0)
}
time(_ => sum2(100000))