Поэтому меня попросили определить матрицу как:
typedef vector<double> vec;
typedef vector<vec> matrix;
и на основе этого напишите некоторые функции, такие как скалярное умножение, сложение и т. д. Все, кроме возведения в степень, работает довольно хорошо, и я понятия не имею, что может вызывать проблемы в этой функции. Прежде всего я определил умножение как:
void multip(const matrix& A, const matrix& B, matrix& result){
int n = A.size();
for (int i = 0; i<n; i++){
for (int j = 0; j<n; j++){
for (int k = 0; k< n; k++){
result[i][j] += A[i][k] * B[k][j];
}
}
}
}
и на основе этого я хотел сделать рекурсивную (это обязательно) функцию возведения в степень следующим образом:
void expo(matrix& M, unsigned n){
if (n>0){
n--;
multip(M, expo(M, n), M);}
else{return;}
}
Это не работает, возвращая [Error] Invalid use of void expression. Я понял, почему это не сработает, но понятия не имею, как это обойти. Может ли кто-нибудь помочь мне с этой проблемой?
n
не является целой степенью двойки, если только вы не разрешите хранить накопленную матрицу в дополнение к начальному значениюM
. - person Ruslan   schedule 24.03.2020expo
ничего не возвращает, и вы пытаетесь отправить его результат, как если бы это была ссылка на матрицу, вmultip
. - person ALX23z   schedule 24.03.2020matrix multip(const matrix& A, const matrix& B)
), либо не используйте повторение, вместо этого выполняйте n обычных умножений. - person pptaszni   schedule 24.03.2020