function B(k, d, nodes) {
if (d == 0) return (u) => (nodes[k] <= u && u < nodes[k + 1] ? 1 : 0);
let Bk0 = B(k, d - 1, nodes);
let Bk1 = B(k + 1, d - 1, nodes);
return (u) =>
((u - nodes[k]) / (nodes[k + d] - nodes[k])) * Bk0(u) +
((nodes[k + d + 1] - u) / (nodes[k + d + 1] - nodes[k + 1])) * Bk1(u);
}