上級 › 関数名を直接書いた再帰呼び出しは、関数を別名に代入し直すと壊れる › パターン1
関数名を直接書いた再帰呼び出しは、関数を別名に代入し直すと壊れる
再帰関数の中で自分自身を関数名で直接呼び出していると、その関数を別の変数名に代入し直して元の名前を消した途端、再帰呼び出しの箇所がobject not foundエラーになります。
1 fact <- function(n) { 2 if (n <= 1) return(1) 3 n * _____________ ^ 4 } 5 math_fact <- fact 6 rm(fact) 7 cat(math_fact(5), "\n")
Error in fact(n - 1) : could not find function "fact"
空欄を埋めて実行を通す
再帰呼び出しがfactという名前を直接参照していると、rm(fact)で元の名前を消した瞬間に参照先を失います。Recall()なら名前に依存せず自分自身を呼び出せます。
次の問題