私は十数回チェックした次の関数を持っていますが、正しく動作するはずですが、結果は間違っています。誰でもこの機能の問題点を指摘できますか?並べ替えを作成するための再帰関数
注:再帰呼び出しで渡されるリストを印刷しています。リストは私が期待する通りです。しかし結果を累積するresultという変数は、最後に正しい順列を含んでいません。また、結果変数へのアクセスを同期しましたが、問題は解決しませんでした。だから、私は同期が問題だとは思わない。コードはそのままコピーして実行できます。
import collection.mutable._
def permute(list:List[Int], result:StringBuilder):Unit =
{
val len = list.size
if (len == 0) (result.append("|"))
else
{
for (i <- 0 until len)
{
println("========" + list + "===========")
result.append(list(i))
if (i != len -1)
{
//println("Adding comma since i is: " + i)
result.append(", ")
}
//println("******** Reslut is:" + result + "***********")
permute((sublist(list, i)), result)
}
}
// This function removes just the ith item, and returns the new list.
def sublist (list:List[Int], i:Int): List[Int] =
{
var sub:ListBuffer[Int] = (list.map(x => x)).to[ListBuffer]
sub.remove(i)
return sub.toList
}
}
var res = new StringBuilder("")
permute(List(1,2,3), res)
println(res)
出力は次のようになります。
========List(1, 2, 3)===========
========List(2, 3)===========
========List(3)===========
========List(2, 3)===========
========List(2)===========
========List(1, 2, 3)===========
========List(1, 3)===========
========List(3)===========
========List(1, 3)===========
========List(1)===========
========List(1, 2, 3)===========
========List(1, 2)===========
========List(2)===========
========List(1, 2)===========
========List(1)===========
**1, 2, 3|32|2, 1, 3|31|31, 2|21|**
をしているのですか? –
JavaとScalaはそれほど違いはありません。これは構文問題ではなく、再帰問題です。 – user1888243
違いはありませんか?ええ、私はあなたに矛盾することができます。 – Dici