n段の階段を1段または2段ずつ上る方法の数を求める問題です。これは動的プログラミング(DP)の典型的な例題です。
n段目に到達する方法は以下の2つに分類できます:
dp[i] = i段の階段を上る方法の数とすると:
空間計算量: O(n)
配列全体を保持
メモリ使用量: n × 8バイト
空間計算量: O(1)
前の2つの値のみ保持
メモリ使用量: 2 × 8バイト
この問題の答えは実際にはフィボナッチ数列と密接な関係があります:
これは偶然ではなく、問題の構造が本質的にフィボナッチ数列の定義と同じだからです。
O(n)
各段について1回ずつ計算
n=40の場合: 40回の演算
O(1) (最適化版)
定数個の変数のみ使用
nに依存しない固定サイズ
JavaScriptでは数値が53ビット精度なので、n≤40では問題なし