求解递归问题——为什么实际的递归问题与我想的不一样

问题
为什么当遇到第一个')',并break,之后,却先接着从while循环执行,然后再从第一个if语句里的第二个k++开始?不应该从)前的x几个return开始吗?(以样例为例)
题目

img

代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>

using namespace std;

int k;
string str;

int dfs()
{
    int res=0;
    
    while(k<str.size())
    {
        if(str[k]=='(')//判断是否为左括号,标志着判断的开始
        {
            k++;//若为左括号则让下标加一,继续判断下一个
            res+=dfs();
            k++;
        }
        else if(str[k]=='|')//若为|,则判断两侧哪侧的x较多,并让res为那个值
        {
            k++;
            res=max(res,dfs());
        }
        else if(str[k]==')') break;//若为右括号,则标志着一个括号内的内容判断结束
        else//若为x,则让res加一,接着向下判断下一个数
        {
            k++;
            res++;
        }
    }
    
    return res;
}

int main()
{
    cin>>str;
    
    cout<<dfs()<<endl;
    
    return 0;
}

你把break;换一行,调试时把断点打在break;单独那行