2014-02-26 2 views
0

스칼라를 처음 사용하고이 코드 부분에 문제가 생겼습니다. 18/20 행에서 스택 오버플로 오류가 발생하지만 이유가 확실하지 않습니다.스칼라 스택 오버플로 오류

def quicksort(list : List[Int]) : List[Int] = list match { 
    case Nil => List() 
    case x::Nil => List(x) 
    case x::xs => { 
    val lesserList = partitionLesser(list.tail, list(0)) 
    val greaterList = partitionGreater(list.tail, list(0)) 
    quicksort(lesserList ::: List(x) ::: greaterList) 
    } 
} 

def partitionLesser(list : List[Int], pivot : Int) : List[Int] = list match{ 
    case Nil => List() 
    case x::Nil => List(x) 
    case x::xs => { 
    if(x <= pivot) { x :: partitionLesser(list.tail, pivot) } 
    else { partitionLesser(list.tail, pivot) } 
    } 
} 

def partitionGreater(list : List[Int], pivot : Int) : List[Int] = list match { 
    case Nil => List() 
    case x::Nil => List(x) 
    case x::xs => { 
    if(x > pivot) { x :: partitionGreater(list.tail, pivot) } 
    else { partitionLesser(list.tail, pivot)} 
    } 
} 

답변

2
def quicksort(list : List[Int]) : List[Int] = list match { 
    case Nil => List() 
    case x::Nil => List(x) 
    case x::xs => { 
    val lesserList = partitionLesser(list.tail, list(0)) 
    val greaterList = partitionGreater(list.tail, list(0)) 
    // quicksort(lesserList ::: List(x) ::: greaterList) 
    quicksort(lesserList) ::: List(x) ::: quicksort(greaterList) 
    } 
}