在同一个问题下, 选取优雅的递归实现可能会让代码变得非常优雅。
很多问题可以用递归描述, 有些数据也很适合递归表示, 比如文件系统。
如果函数A 和函数B 互相不停调用,叫做 mutially recursive。
在遇到典型的 递归型问题 或递归型数据时, 可以使用递归实现。
- 递归的每个变量都是不可变的, 没有side effect,不会修改外界的其他变量。,
- 递归需要多余的空间, 即栈。
函数式编程: 没有side effect 的编程叫 paradigm 叫
命令式编程: 使用 variable 和 loop 的变成叫