2016-05-26 3 views
-2

私はScalaの初心者であり、プログラミングの初心者です。データサイエンスに移行しようとしていて、自分で学習しています。これが非常に些細な質問であれば、お詫び申し上げます。誰かが主な機能について何が間違っているか教えてください。私はcountChange関数で引数を渡そうとしていますが、コードは何も印刷しません。私はそれを見て理解しようとしましたが、私は完全に失われており、どんな助けでも大いに感謝されるでしょう!ありがとうございました!Scalaのカウント変更 - コードが印刷されない

object main { 
    def countChange(money: Int, change: List[Int]): Int = { 
    def totalWays(sum: Int, denomination: List[Int]): Int = { 
     if (sum < 0) 0 
     else 
     if (sum == 0) 1 
     else 
      if (denomination.isEmpty && sum >= 0) 0 
      else 
      countChange(sum, denomination.tail) + countChange(sum-denomination.head,denomination) 
    } 
    countChange(money, change.sortWith(_.compareTo(_) < 0)) 

    } 


    def main(args: Array[String]) { 
    val l = List(1,2) 
    println(countChange(0,l)) 

} 
} 
+0

それは、コンパイルしていますか?この部分は正しい 'change.sortWith(_。compareTo(_)<0)'のようではありません。 – pedrofurla

+0

@pedrofurla:いいえ、それはありません!ああ!それについて何が間違っているのか教えていただけますか?実際には、私は次のリンクからこのコードを参照しました:http://stackoverflow.com/questions/12629721/coin-change-algorithm-in-scala-using-recursion – Gingerbread

+2

私はIDE(IntelliJ)にコードを接続しているようですコンパイルするには2つのことに気付きました:1) 'totalWays()'関数は決して呼び出されず、2) 'countChange()'関数は無限に再帰的です。救済措置はない。 – jwvh

答えて

2

@jwvhのコメントで指摘されている詳細はトラック上にあります。あなたはどこかからいくつかのものをコピーしたように見え、途中で迷子になったようです。 totalWays内部関数は、countChangeを呼び出すときに意図したとおりに実装されているため、内部関数は必要ありません。だから、あなたは単にそれをアンラップすることができますし、それに応じて、変数の名前を変更します。

def countChange(money: Int, denomination: List[Int]): Int = { 
    if (money < 0) 0 
    else if (money == 0) 1 
    else if (denomination.isEmpty && money >= 0) 0 
    else 
     countChange(money, denomination.tail) + countChange(money - denomination.head, denomination) 
    } 

また、あなたが最初の量や宗派のリストでそれを呼び出すべきである:

def main(args: Array[String]): Unit = { 
    val l = List(1,2) 
    println(countChange(3,l)) 
    } 
    // prints: 2 
+1

これは良い解決策です。 2ノート:「金種」が空の場合、これは変更できない「金額」と同じではありません。したがって、andステートメントは完全に正しいわけではありません。また、2つのステートメントの両方が0の場合は、ステートメントまたはステートメントと組み合わせることもできます。結果のコードはif-else if-else構造になります。 –

+0

@ ale64bit:どうもありがとう!私はあなたが何を意味するかを見て、それは完全に動作します!ありがとうございました!また、私はお金= 0で呼び出す場合でも、それはコードに従って動作します、私は1を取得する必要があります。もう一度ありがとう! – Gingerbread

+0

@Max Wen:はい、あなたは正しいです!私はそれを試みる!ありがとうございました! – Gingerbread

関連する問題