Phone Keypad

Can someone please explain the recursive call for few iteration.
Problem Statement: Given a digit string, return all possible letter combinations that the number could represent.

void phone(string s,unordered_map<int,string>&m,vector&ans,int idx,string temp){
if(idx==s.length()){
ans.push_back(temp);
return;
}
string l=m[s[idx]-‘0’];
for(int i=0;i<l.length();i++){
phone(s,m,ans,idx+1,temp+l[i]);
}
}

vector Solution::letterCombinations(string s) {
unordered_map<int,string>m;
m.insert({0,“0”});
m.insert({1,“1”});
m.insert({2,“abc”});
m.insert({3,“def”});
m.insert({4,“ghi”});
m.insert({5,“jkl”});
m.insert({6,“mno”});
m.insert({7,“pqrs”});
m.insert({8,“tuv”});
m.insert({9,“wxyz”});
vector ans;
phone(s,m,ans,0,"");
return ans;
}