Googleクラスルーム
GeoGebraGeoGebra Classroom

factをやろう

再帰なしに階乗計算できる?

このワークシートはMath by Codeの一部です。 <factorial> フィボナッチ数列の一般項は、意外なことに、 黄金比にかかわる無理数を使った式になる。 くわしい計算はしませんが、 漸化式から特性方程式を作り一般項を作ると無理数が残るんだ。 それに対してNの階乗fact(N)は1からNまでの積だから、一般項は単純だ。 だから、再帰関数でも表せるけど、forで十分かけるね。
#再帰を使うならキャッシュを使おう。 #================== from functools import cache @cache def factorial(n): return n * factorial(n-1) if n else 1 factorial(100) #再帰なしなら、どんどんかけ算して上書きしよう。 #================== def fact(n): res=1 for i in range(1,n+1): res *=i return res fact(100) #================== [OUT] 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

階乗計算

geogbraでは fibを再帰を使わずに素早く求めることができた。 そのときの手段がIterationListだった。 同じようにfactも再帰を使わず求めることができた。 しかし、有効桁数の点では課題が残るね。 質問:geogebraでは、pyrhoのように多桁計算が無前提でできたり、他の言語のようなモジュール,パッケージ、bigIntとかBigDecimalとかは作れないのでしょうか。作れないとしたら、それは、言語設計上、無理なのでしょうか。 geogebraにはProductというコマンドがあったね。 1から100までの数列をf=Sequence(100)で作っておき、 それの積をProduct(f)すると、factorial(100)が計算できる。 でも、やはり、有効数字には課題が残った。

階乗計算