読者です 読者をやめる 読者になる 読者になる

たらいをまわしたくなった

R

遅延評価かわいいよ遅延評価。

> (function(x,y,z){ifelse(x<=y,y,Recall(Recall(x-1,y,z),Recall(y-1,z,x),Recall(z-1,x,y)))})(10,5,0)
[1] 10

しかし、再帰が深すぎると怒られた。

> (function(x,y,z){ifelse(x<=y,y,Recall(Recall(x-1,y,z),Recall(y-1,z,x),Recall(z-1,x,y)))})(768,384,0)
 エラー: C stack usage is too close to the limit

こうすれば動いてくれた。

options(expressions=500000)
tarai <- function(x,y,z){ifelse(x<=y,y,tarai(tarai(x-1,y,z),tarai(y-1,z,x),tarai(z-1,x,y)))}
tarai(768,384,0)