C++ 有人能给我解释一下这个矩阵求幂函数是如何工作的吗? #包括 使用名称空间std; //用矩阵指数法求第n个fib数的程序 void multi_mat(int A[3][3],int B[3][3]) { [3][3];; 对于(int i=0;i

C++ 有人能给我解释一下这个矩阵求幂函数是如何工作的吗? #包括 使用名称空间std; //用矩阵指数法求第n个fib数的程序 void multi_mat(int A[3][3],int B[3][3]) { [3][3];; 对于(int i=0;i,c++,function,matrix,exponentiation,C++,Function,Matrix,Exponentiation,调用multi_mat函数时,数据存储在哪里 最初,它存储在res\u mat: #include <bits/stdc++.h> using namespace std; //Program to find the nth fib number using matrix exponentation void multi_mat(int A[3][3], int B[3][3]) { int res_mat[3][3]; for (int i = 0; i <

调用multi_mat函数时,数据存储在哪里

最初,它存储在
res\u mat

#include <bits/stdc++.h>
using namespace std;
//Program to find the nth fib number using matrix exponentation
void multi_mat(int A[3][3], int B[3][3])
{
    int res_mat[3][3];
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            res_mat[i][j] = 0;
            for (int k = 0; k < 3; k++)
            {
                res_mat[i][j] += A[i][k] * B[k][j];
            }
        }
    }
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            A[i][j] = res_mat[i][j];
        }
    }
}
int power(int F[3][3], int n)
{
    int M[3][3] = {{1, 1, 1}, {1, 0, 0}, {0, 1, 0}};
    if (n == 1)
        return F[0][0] + F[0][1];
    power(F, n / 2);
    multi_mat(F, F);
    if (n % 2 != 0)
        multi_mat(F, M);
    return F[0][0] + F[0][1];
}
int findfib(int n)
{
    int F[3][3] = {{1, 1, 1}, {1, 0, 0}, {0, 1, 0}};
    if (n == 0)
        return 0;
    if (n == 1 || n == 2)
        return 1;
    return power(F, n - 2);
}
int main()
{
    int n = 0;
    cin >> n;
    cout << "The fib of the " << n << "th number is : " << findfib(n) << '\n';
    return 0;
}
但是一些行之后,它被复制到
A

res_mat[i][j] += A[i][k] * B[k][j];
因此,在执行结束时,存储结果的位置是第一个参数
A
,该参数在函数外部被称为
F
,函数的调用方式如下:

A[i][j] = res_mat[i][j];
矩阵res_mat是否在以前调用时保存了这些值,或者是否使用一些垃圾值对其进行了初始化

是的,此时它具有“垃圾”值:

multi_mat(F, F);
但是,当这一行对矩阵的每个元素执行时,它将被初始化为零:

int res_mat[3][3];
res_mat[i][j] = 0;