アプリ版:「スタンプのみでお礼する」機能のリリースについて

再帰呼び出しを用いた関数の計算量を求める方法がわからないので質問させていただきます.
xのn乗を再帰呼び出しを用いて求める関数に関して,計算量を求める問題なのですが,どのような方針で求めればよいのでしょうか?

int exponent(int x, int n)
{
  if(n == 0){
    return 1;
  }else{
    return x * exponent(x, n-1);
  }
}

exponentがn回呼ばれるからO(n)というのは間違いでしょうか?

A 回答 (1件)

計算量は n のみに依存し x には依存しません. なので, exponent(x, n) の計算量を T(n) とおきます.


T(0) = O(1), T(n) = T(n-1) + O(1)
と書けます. この漸化式を解けば T(n) = O(n).
「exponent が n回呼ばれるから O(n)」というのは省略しすぎです. exponent の中の (再帰呼び出し以外の) 計算量が O(n) だったら, そのようには言えませんよね.
「exponent の中で再帰呼び出し以外の計算量が O(1) で, exponent そのものは都合 n回呼び出されるから O(n)」とまで書いてあればいいかもしれない. 読む人によってよいとしたりだめとしたりするかもしれません.
    • good
    • 0
この回答へのお礼

回答ありがとうございます.

なるほど,漸化式を用いて求めればいいんですね.
詳しい説明,ご忠告ありがとうございました.

お礼日時:2009/07/04 13:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A