Subset sum easy

#include
using namespace std;

bool subset(int *a, int n, int i, int sum,int cnt)
{
if(i==n)
{

if(sum==0 && cnt>0)

return true;

    else
    return false;

}

return subset(a, n, i+1, sum+a[i],cnt+1) or subset(a, n,i+1, sum,cnt);

}
int main() {
int t;
cin>>t;

while(t–)
{

int n, a[10];
cin>>n;

for(int i=0;i<n;i++)

cin>>a[i];

if(subset(a,n,0,0,0))

cout<<“Yes”;

else cout<<“No”;

cout<<endl;

}
return 0;
}
this is the code i am not able to understand how exactly recursion run in return subset
thank you

to form a subset u can either choose to include the current element or not to include the current element
subset(a, n, i+1, sum+a[i],cnt+1) - this is to include this current element
subset(a, n,i+1, sum,cnt) - this is to move ahead without including the current element