int factorial(int n)
{
if(n < 0) {return -1;}
if(n == 0) {return 1;}
return n*factorial(n-1);
}
私は漸化式再帰アルゴリズムの空間複雑性を見つける一般的な方法は何ですか?時間の複雑さを見つけるために
T(n) = T(n-1) + c = T(n-2) + 2c = ... = T(n-k) + kc => O(n)
T(0) = 1;
を作成する(フィボナッチのような)アルゴリズムのようなもののためのスペースの複雑さを見つけるための一般的な方法は何ですか?コールスタックの深い部分を見つける必要がありますか?
さてあなたは、再帰的にそれをn回呼び出す必要があります、各呼び出しは、上の独自のフレームを割り当てます局所変数と積み重なるので、空間の複雑さはnの次数になります。 – Evk
'factorial'関数を呼び出すたびに、その呼び出しのメモリの「スタック」部分にスタックフレームが作成されます。単一のスタックフレームには、この関数で定義された変数、関数内のパラメータ、および戻りアドレスが含まれます。この場合、すべての呼に対して、この情報を一定時間内に記憶することができる。この関数には呼び出しが線形になるので、合計メモリはO(n)になります。 – Shubham