4.1. Minimalistic function: Functional programmers sometimes tend to write code in a minimalistic way. Can you examine this version of the Fibonacci function, and explain whether it works, and if so, how?
const fib2 = n => (n < 2 ? n : fib2(n - 2) + fib2(n - 1));
4.2. A cheap way: The following version of the Fibonacci function is quite efficient and doesn't do any unnecessary or repeated computations. Can you see how? Suggestion: try to calculate fib4(6)
by hand, and compare with the example given earlier in the book:
const fib4 = (n, a = 0, b = 1) => (n === 0 ? a : fib4(n - 1, b, a + b));
4.3 A shuffle test: How would you write unit tests for shuffle()
, to test whether it works correctly with arrays with repeated values?
4.4. Breaking laws: Using .toBeCloseTo()
is very practical, but it can cause some problems. Some basic mathematics properties are:
a number should equal itself: for any number a, a should equal a
- If a number a equals number b, then b should...