Comment detail

自然数の分割 (Nested Flatten)
1
2
3
4
5
6
(|n, m|{
  if(m <= 1) return [[n]];
  r: [];
  (n + 1).times{|x| callee(x, m - 1){ r.push_back([n - x] ~ it); } }
  return r;
})(5, 3){ it.p; }
fiber を使って書き換えてみる。
1
2
3
4
5
6
(|n, m|{ c: callee; m--;
  return fiber{
    if(m < 1) yield [n];
    else (n + 1).times{|x| c(x, m){ yield [n - x] ~ it; } }
  }
})(5, 3).join("\n").p;

Index

Feed

Other

Link

Pathtraq

loading...