Collat​​z 序列

只要条件成立,while 循环就会运行它的身体。例如,以下代码计算并打印给定数字的 Collat​​z 序列

function collatz(n)
    while n ≠ 1
        println(n)
        n = iseven(n) ? n ÷ 2 : 3n + 1
    end
    println("1... and 4, 2, 1, 4, 2, 1 and so on")
end

用法:

julia> collatz(10)
10
5
16
8
4
2
1... and 4, 2, 1, 4, 2, 1 and so on

可以递归地编写任何循环,对于复杂的 while 循环,有时递归变量更清晰。但是,在 Julia 中,循环比递归具有一些明显的优势:

  • Julia 不保证尾部调用消除,因此递归使用额外的内存并可能导致堆栈溢出错误。
  • 而且,出于同样的原因,循环可以减少开销并且运行得更快。