【发布时间】:2020-02-12 20:20:56
【问题描述】:
我对@987654321@ 使用递归,将列表传递给方法,但与递归基本情况混淆。由于 Scala 不允许您修改传递的参数,因此我无法为传递的列表分配新值。 这是我的代码:
def shuffle(list1: List[Any], list2: List[Any]): List[Any] = {
list1.zipAll(list2, "", "")
.flatMap(_.productIterator.toList)
.filter(_ != "")
}
def splitLists(list: List[Any], n: Int) = {
if (n > list.length) {
throw new Exception("N is greater than length of list")
}
else if (n == list.length) {
List(list, List())
}
else {
List(list.slice(0, n),
list.slice(n, list.length))
}
}
以下方法处于无限循环中。我知道问题出在我初始化 list 变量的第一行。
@annotation.tailrec
def in_shuffle(list:List[Any], org_list:List[Any]):Any={
var list:List[Any] = List()
if (list.equals(org_list)) return true
if (list.length<1) {
list=org_list
}
val div_list = splitLists(list, list.length/2)
list = shuffle(div_list(0), div_list(1))
in_shuffle(list, org_list)
}
In-Shuffle 使用以下代码被调用。
println(in_shuffle(List(), (1 to 4).toList))
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
传递的数组将是:[1,2,3,4]
Step 1: [1,3,2,4] --> Divide equally and then perform ShufflingStep 2: [1,2,3,4] --> Divide equally and then perform Shuffling检查其原始列表是否返回 true。 -
我认为你想要实现什么以及问题是什么并不是很清楚。 “对基本情况感到困惑”......怎么办?在哪里?什么让你困惑?
-
请使用泛型而不是 Any。
-
请指定示例输入和输出。我错过了一些东西。它将帮助我们抓住意图并简化实施。
标签: scala recursion shuffle tail-recursion