名前付き関数
スプレッドシートで名前付き関数が使えるので再帰関数も作れるよっていうお話です。
適当な例
階乗
$$
6! = 6 \cdot 5 \cdot 4 \cdot 3 \cdot 2 \cdot 1 = 720
$$
みたいなやつです。
スプレッドシートにも一緒の関数があるので作る必要はないですが、下記のような感じで作れます。
FACTだと名前がかぶって怒られるので適当な関数名で。
FACT_OWN(n)
=IF(n=1, 1, n*FACT_OWN(n-1))
素数
素数を判定する関数。
もっといいやり方ありそうですが。
素数を判定する関数
ISPRIME(n,k)
=IF(k<1, FALSE, IF(k = 1, TRUE, AND(MOD(n,k)<>0, ISPRIME(n,k-1))))
素数を取得する関数
GETPRIME(n)
=IF(n<2,"",SPLIT(REDUCE("",SEQUENCE(n-1,1,2,1), lambda(res, cur, IF(ISPRIME(cur, INT(SQRT(cur))), res&","&cur, res))),","))
フィボナッチ数
普通に再帰関数でやると30ぐらいからできませんね。
たぶん、アルゴリズムを改善すればいけるかもですが、ここは一般解に逃げます。
(再帰関数関係なくなっちゃいましたが)
a_n = \frac{1}{\sqrt{5}} \left\{ \left(\frac{1+\sqrt{5}}{2}\right)^n - \left( \frac{1-\sqrt{5}}{2} \right)^n \right\}
むむむ、大きい項の値がおかしいですね。
なんでだろう。だれか教えてください。
ちなみに再帰関数で計算している方は、#ERROR!の箇所で
「この数式の計算中に計算の上限に達しました。」
というエラーメッセージが表示されています。
さいごに
こんかいは簡単な紹介だけでした。
いろいろできそうな可能性を感じますが、計算の上限とか制限もありそうですね。
でも再帰関数の計算も割と早いので、スプレッドシートでできるものはGASでやるよりいいかもしれないですね!