2012-09-27 2 views
0
def comb(c: Int, r: Int): Int = { 
     if(r == 1) c 
     else if(r < c) comb(c-1, r-1) + comb(c-1, r) 
     else 1 
} 
comb(20,10) //184,756 

내가하고 싶은 것은 comb(10,20)으로 전화하여 동일한 결과를 얻는 것입니다. cr으로, rc으로 바꾸려고했으나 서명되지 않았습니다. 작동하지 않습니다.조합 : 매개 변수 순서 변경

def comb(c: Int, r: Int): Int = { 
    if(c == 1) r 
    else if(c < r) comb(r-1, c-1) + comb(r-1, c) 
    else 1 
    } 
    comb(10,20) //2 -> not right 

답변

1

당신은 또한 하위 호출의 순서를 변경해야 할 것 :

def comb(c: Int, r: Int): Int = { 
    if (c == 1) r 
    else if (c < r) comb(c - 1, r - 1) + comb(c, r - 1) 
    else 1 
} 

이것은 예상 된 결과 제공 :

comb(10, 20) // 184756 
+0

can 전체 기능을 게시 하시겠습니까? – Andrew

1

내가 추가 할을하지 않습니다 지방 대표를 두려워 할 것 :

scala> def comb(c: Int, r: Int): Int = { 
|  if(r == 1) c 
|  else if(r < c) comb(c-1, r-1) + comb(c-1, r) 
|  else 1 
| } 
comb: (c: Int, r: Int)Int 

scala> comb(20,10) //184,756 
res0: Int = 184756 

scala> def cc(c: Int, r: Int): Int = { 
    | def cc2(c: Int, r: Int): Int = { 
    | if(r == 1) c 
    | else if(r < c) comb(c-1, r-1) + comb(c-1, r) 
    | else 1 
    | } 
    | if (c < r) cc2(r,c) else cc2(c,r) 
    | } 
cc: (c: Int, r: Int)Int 

scala> cc(20,10) 
res1: Int = 184756 

scala> cc(10,20) 
res2: Int = 184756 
관련 문제