先日、正規の悪いフィボナッチアルゴリズムを見ていました:
public static int fib(int n)
{
// Base Case
if (n < 2)
return 1;
else
return fib(n-1) + fib(n-2);
}
興味深い観察をしました。fib(n) を呼び出すと、1 と n の間の k に対して fib(k) は正確に fib(n-k+1) 回 (または fib(0) の定義に応じて fib(nk) ) 呼び出されます。また、fib(0) は fib(nk-1) 回呼び出されます。これにより、 fib(100) で fib 関数への呼び出しが正確に 708449696358523830149 あることがわかります。
あなたが知っているこの機能に関する他の興味深い観察はありますか?
追記:私はメモ化などについての素晴らしいことをすべて知っています...私はそれを最適化する方法について尋ねているわけではありません。