递归函数
简单的递归
使用递归和三元条件运算符 ,我们可以创建内置 factorial
函数的替代实现:
myfactorial(n) = n == 0 ? 1 : n * myfactorial(n - 1)
用法:
julia> myfactorial(10)
3628800
与树木一起工作
递归函数通常对数据结构最有用,尤其是树数据结构。由于 Julia 中的表达式是树结构,因此递归对于元编程非常有用。例如,下面的函数收集表达式中使用的所有头的集合。
heads(ex::Expr) = reduce(∪, Set((ex.head,)), (heads(a) for a in ex.args))
heads(::Any) = Set{Symbol}()
我们可以检查我们的功能是否按预期工作:
julia> heads(:(7 + 4x > 1 > A[0]))
Set(Symbol[:comparison,:ref,:call])
此功能紧凑,使用各种更先进的技术,如 reduce
高阶函数 ,Set
数据类型和生成器表达式。