2017-03-12 10 views
-1

行列の行列式の行列式を計算しようとしています。行列の決定子をC++で再帰的に

私が書いた関数はパラメータを取っていません(クラス内の関数なので、マトリックスは "this->"コマンドで定義されています)。 行列2x2を解くことができる最小のケースだと思います。この場合、3x3の行列では、最初の要素に2x2(2x2 * 3x3 - 2x3 * 3x2)の行列式を乗じることで解くことができますが、もちろんそれを繰り返し行う必要があります。値。現時点では

私のコードは次のいずれかです。

int Matriz::calcularDeterminante() 
{ 
    int numero=0; 
    int signo = 1; 
    if (n_filas == 1) { 
     return (this->matriz[0][0]); 
    } 
    else if (n_filas == 2) { 
     return (this->matriz[0][0] * this->matriz[1][1]) - (this->matriz[0][1] * this->matriz[1][0]); 
    } 
    else { 
     for (int i = 0; i < n_filas; i++) { 
      if (signo == 0) { 
       numero += -1* matriz[0][i] * calcularDeterminante(); 
       signo++; 
      } 
      else if (signo == 1) { 
       numero += signo * matriz[0][i] * calcularDeterminante(); 
       signo--; 
      }    
     } 
    } 
return numero; 
} 

が、再帰呼び出しはちょうど間違っています。

+0

あなたの質問は何ですか? – UnholySheep

+0

行列式を解くことができるように再帰呼び出しを行う方法 –

+2

何をやってみましたか?コードを表示し、問題の内容を説明してください。今すぐあなたのコードを書くように頼んだかのように聞こえます – UnholySheep

答えて

2

主な問題は、そのコードが3x3で実行されるたびに、3x3でcalcularDeterminante()を呼び出すことです。

else文のループの中で、3つの2x2の「サブ」行列を作成してからcalcularDeterminante()を呼び出す必要があります。個人的には、行、列を指定してこれらのサブマトリックスを取得するヘルパーメソッドを導入します。