Commit bf7252d 1 parent 2c3a42e commit bf7252d Copy full SHA for bf7252d
File tree 2 files changed +73
-10
lines changed
data-structures-and-algorithms
2 files changed +73
-10
lines changed Original file line number Diff line number Diff line change 1
1
### 递归
2
2
3
3
``` js
4
- function fibonacci (n ) {
5
- if (n === 1 ) return 1 ;
6
- return fibonaci (n) * fibonaci (n - 1 );
7
- }
4
+ function fibonacci (n ) {
5
+ if (n === 1 ) return 1 ;
6
+ return fibonaci (n) * fibonaci (n - 1 );
7
+ }
8
8
```
9
9
10
10
递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误(stack overflow)。
11
11
12
12
### 尾递归(不会爆栈)
13
13
14
14
``` js
15
- function fibonacci (n , total ) {
16
- if (n === 1 ) return total;
17
- return fibonaci (n - 1 , n * total);
18
- }
19
- console .log (fibonacci (5 , 1 ));
15
+ // fibonaci(5, 1, 1)
16
+ // fibonaci(4, 1, 2)
17
+ // fibonaci(3, 2, 3)
18
+ // fibonaci(2, 3, 5)
19
+ // fibonaci(1, 5, 8)
20
+ // fibonaci(0, 8, 13) => 8
21
+ function fibonacci (n , ret1 , ret2 ) {
22
+ if (n === 0 ) return ret1;
23
+ return fibonaci (n - 1 , ret2, ret1 + ret2);
24
+ }
25
+ console .log (fibonacci (5 , 1 , 1 ));
20
26
```
21
27
22
- 但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。
28
+ 但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。
Original file line number Diff line number Diff line change
1
+ # Lerna
2
+
3
+ Lerna 是一个 monorepo 包管理工具,可以将不同的软件包集中在一起管理,在保持独立性的同时又能保持包之间的关联性。
4
+
5
+ ## 初始化项目
6
+
7
+ 使用之前需要本地安装 lerna,截止我记录前的最新版本是 4.0.0。
8
+
9
+ ``` shell
10
+ npm i lerna -g
11
+ ```
12
+
13
+ 使用命令 ` lerna init ` 初始化项目:
14
+
15
+ ``` shell
16
+ lerna init
17
+ ```
18
+
19
+ 这条命令将会做两件事:
20
+
21
+ 1 . 如果 lerna 不存在,将会在根目录下 package.json 中的 devDependency 里加入 lerna 依赖。
22
+ 2 . 创建一个 lerna.json 配置文件来存储版本号。
23
+
24
+ 在使用此命令时还可以使用可选项:
25
+
26
+ 1 . --independent
27
+
28
+ ``` shell
29
+ lerna init --independent
30
+ ```
31
+
32
+ 该标志告诉 Lerna 使用独立版本控制模式,这种模式允许使用者对每个 package 单独改变版本号。每次执行 lerna publish 的时候,针对所有有更新的package,会逐个询问需要升级的版本号,基准版本为它自身的 package.json 里面的版本号。
33
+
34
+ 2 . --exact(默认模式)
35
+
36
+ ``` shell
37
+ lerna init --exact
38
+ ```
39
+
40
+ 该标志告诉 Lerna 使用固定版本控制模式,这种模式下所有包都会使用 lerna.json 的统一版本号。
41
+
42
+ 生成的项目结构如下:
43
+
44
+ ```
45
+ lerna-repo/
46
+ packages/
47
+ package.json
48
+ lerna.json
49
+ ```
50
+
51
+ 其中 packages 就是后续我们要单独管理的包的集合,每增加一个包,都会在 packages 下新增一个目录。
52
+
53
+ ## 新增 package
54
+
55
+ 在 packages 下新增包是通过 ` lerna create ` 命令实现的。
56
+
57
+
You can’t perform that action at this time.
0 commit comments