【发布时间】:2016-06-03 16:30:18
【问题描述】:
我正在学习 F#(第二天 O:-))并且我想创建 Collatz sequence,其中每个值都是根据前一个值计算的。我知道,用 C# 来做吧
public static void Main(string[] args)
{
Console.WriteLine(string.Join(", ", collatz(13)));
}
static IEnumerable<int> collatz(int n)
{
while (n != 1)
{
yield return n;
if (n % 2 == 0)
n /= 2;
else
n = 3 * n + 1;
}
yield return 1;
}
或者如何在 F# 中创建类似的数组
let rec collatz = function
| 1 -> [ 1 ]
| n when n % 2 = 0 -> n::collatz (n / 2)
| n -> n::collatz (3 * n + 1)
collatz 13 |> Seq.map string |> String.concat ", " |> printfn "%s"
但不知道顺序解决方案...
【问题讨论】:
-
你有什么问题?