Friends pairing problem->I m getting ans as 0. What is wrong in this?

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
ll int dp[105]={-1};
ll int pair1(ll int n){
ll int &ans =dp[n];

if(n==0||n==1||n==2)
    return n;

if(ans!=-1)
return ans;

ans=((pair1(n-1)%mod)+((n-1)*pair1(n-2))%mod)%mod;
return ans;

}
int main() {
//code
ll int t;cin>>t;
while(t–){
ll int n;cin>>n;
pair1(n);
cout<<dp[n]<<endl;
}
return 0;
}

Your logic is correct.

#include <bits/stdc++.h>
using namespace std;

#define ll long long int

int main(){
ll n;
cin>>n;

ll dp[n+1];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for(ll i=3;i<=n;i++){
    dp[i] = dp[i-1] + (i-1)*dp[i-2];
}


cout << dp[n] << endl;

}

I know the bottom up approach…want to know what is wrong in my top down approach?

@Tanishq200
refer to dis
dis is d updated code

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
ll int dp[105];
ll int pair1(ll int n){
if(n==0||n==1||n==2)
return dp[n]=n;
ll int &ans =dp[n];
if(ans!=-1)
return ans;

ans=((pair1(n-1)%mod)+((n-1)*pair1(n-2))%mod)%mod;
return dp[n]=ans;

}
int main() {
//code
memset(dp,-1,sizeof(dp));

ll int t;cin>>t;
while(t--){
    ll int n;cin>>n;
    pair1(n);
    cout<<dp[n]<<endl;
}
return 0;

}

hope dis helps