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