遞迴函式

簡單的遞迴

使用遞迴和三元條件運算子 ,我們可以建立內建 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 資料型別和生成器表示式。