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)が計算できる。
でも、やはり、有効数字には課題が残った。