遅延評価かわいいよ遅延評価。
> (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)