回答編集履歴
1
ちゃんと動くやーつ
answer
CHANGED
@@ -2,4 +2,28 @@
|
|
2
2
|
```JavaScript
|
3
3
|
f = (x) => x.length === 2 ? x : f(x.reduce((acc, x, i) => i % 2 === 0 ? [...acc,[x]] : [...acc.slice(0, acc.length - 1), [acc[acc.length - 1][0], x]],[]))
|
4
4
|
```
|
5
|
-
再帰使ってるのですぐスタックオーバーフローになっちゃいますが。
|
5
|
+
再帰使ってるのですぐスタックオーバーフローになっちゃいますが。
|
6
|
+
|
7
|
+
### 追記
|
8
|
+
すみません脳死で作ってたのでツリーが偏ります。まじめにやると。
|
9
|
+
```JavaScript
|
10
|
+
function build(xs){
|
11
|
+
if(xs === undefined || !Array.isArray(xs) || xs.length === 0){
|
12
|
+
return undefined
|
13
|
+
} else if(xs.length === 1){
|
14
|
+
return xs
|
15
|
+
} else if(xs.length === 2){
|
16
|
+
return xs
|
17
|
+
} else {
|
18
|
+
const i = Math.floor(xs.length / 2)
|
19
|
+
const inits = xs.splice(0, i)
|
20
|
+
const tails = xs.splice(i -i , xs.length)
|
21
|
+
return [build(inits), build(tails)]
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
ys = [...Array(10).keys()]
|
26
|
+
console.log(build(ys))
|
27
|
+
```
|
28
|
+
こんな感じです。
|
29
|
+
[動くコード](https://playcode.io/718556)
|