矩阵乘法计算量估算 C++ 递归 段错误

矩阵乘法的运算量与矩阵乘法的顺序强相关。
例如:
A是一个50×10的矩阵,B是10×20的矩阵,C是20×5的矩阵
计算ABC有两种顺序:((AB)C)或者(A(BC)),前者需要计算15000次乘法,后者只需要3500次。
编写程序计算不同的计算顺序需要进行的乘法次数。
本题含有多组样例输入!

我的思路是 遍历计算规则 取两个操作字符 第一个前面一定是( 入栈 非第一个就开始计算
a(bcd) bcd 算完结果返回b 读到) 就把b插入)后面待读取做下一个操作字符

报错信息段错误!

改了几遍了 还是过不了 完全不知问题在哪!

源代码:

#include<iostream>
#include<string>
#include<vector>                        //vector用于存放矩阵向量
#include<stack>                         //stack用于字符串的存取处理
using namespace std;
int pos;//递归 四则运算指针
stack<char> st;

int docal(string &s,vector<vector<int>> v){
    int sum=0;
    char a,b;//操作符AB
    //stack<char> st;
    int mark;
    while(pos<s.size()){
        if(s[pos]=='('){//入栈 作为第一个操作符的标识
            st.push(s[pos]);
            pos++;
            sum+=docal(s, v);//递归 算括号内的乘法次数
        }
        else if(isalpha(s[pos])&& st.top()=='(' ){//栈内有左括号说明是第一个操作符a  错误就在这里! 调试卡在这 
            st.push(s[pos]);
            mark=pos;//标记起始操作符
        }
        else if(st.top()!='('&&(isalpha(s[pos]))){//非第一个 计算 直到)终止
            b=s[pos];
            a=st.top();
            int aa=a-'A';
            int bb=b-'A';
            sum+=v[aa][0]*v[aa][1]*v[bb][1];
            v[aa][1]=v[bb][1];
        }
        else if(s[pos]==')'){//终止标识  将起始操作符a和对应的( 出栈
            st.pop();//a出栈
            st.pop();//( 出栈
            s=s.insert(pos,pos+1,s[mark]);//把起点操作符插入后面待读取
            pos++;
            break;
        }
        pos++;
    }
    return sum;
}
int main()
{//矩阵乘法分析:a[50 10] b[10 20]计算次数=50*10*20=10000 得到d[50][20]
    //括号优先级 stack处理
    //二维向量存两两的矩阵行列数 一维下角标有点绕 
    //而且计算结果存放前还得删除之前用掉的两个矩阵数据
    int n;
    while(cin>>n)
    {
        int ans=0;
        vector<vector<int>> v(n,vector<int>(2,0));
        for(int i=0;i<n;i++){
            for(int j=0;j<2;j++)
                cin>>v[i][j];
        }
        string s;//getline居然没读到s
        cin>>s;
        pos=1;
        ans=docal(s,v);
        cout<<ans;
    }
}