18/08/07 21:33:35.05 EI7y80Rw.net
関数の定義に自分自身を使う、再帰関数のプログラムは難しいなぁ。
手近なRで練習。
1,2,2,3,3,3の数列から3個の数字を取り出しての並べ方を全部表示する。
reperm <- function(n, r, v) {
if(n!=length(v) | n < r) return('ERROR')
if(r==1) return(matrix(v))
else {
re <- NULL
for(i in 1:n) re=rbind(re, cbind(v[i], reperm(n-1,r-1,v[-i])))
return(unique(re))
}
}
n=6
r=3
v=c(1,2,2,3,3,3)
v=c('ド底辺シリツ','イカサマ入試','イカサマ入試','裏口入学','裏口入学','裏口入学')
print(reperm(n,r,v),quote=FALSE)