小编KPA*_*KPA的帖子

F#函数查找列表的所有旋转

我在这里有一些F#代码用于递归函数,它将列表向左旋转n.我是F#的新手,我正在寻找一种修改此代码的方法,不仅可以按n位置输出一次旋转,还可以输出所有可能的旋转.

例如,假设我有列表:

let list1 = [1; 2; 3; 4]
Run Code Online (Sandbox Code Playgroud)

我想在此列表上调用rotate,以便输出为:

[ [1; 2; 3; 4]; [2; 3; 4; 1]; [3; 4; 1; 2]; [4; 1; 2; 3] ]
Run Code Online (Sandbox Code Playgroud)

我有左移n的代码是:

let rec rotate xs k = 
    match xs, k with
        |[], _ -> []
        |xs, 0 -> xs
        |x::xs, k when k > 0 -> rotate(xs @ [x])(k-1)
        |xs, k -> rotate xs (List.length xs + k)
Run Code Online (Sandbox Code Playgroud)

我不知道如何编辑它来执行上面列出的步骤.任何帮助或资源将不胜感激.我应该补充一点,我真的希望函数是递归的.谢谢.

recursion f# list rotation

5
推荐指数
2
解决办法
766
查看次数

标签 统计

f# ×1

list ×1

recursion ×1

rotation ×1