Why first code is giving negative ans and second one is running perfectly fine?
first one:-
public int sol(int n, int k) {
if (n == k) {
return 1;
}
if (k == 0) {
return 0;
}
return ((sol(n - 1, k - 1) % mod) + ((n - 1) * sol(n - 1, k)) % mod) % mod;
}Second one:-
int dp[][] = new int[1001][1001], mod = 1000000007;
public int rearrangeSticks(int n, int k) {
if (n == k) return 1;
if (k == 0) return 0;
if (dp[n][k] == 0)
dp[n][k] = (int)((1L * rearrangeSticks(n - 1, k - 1) + 1L * rearrangeSticks(n - 1, k) * (n - 1)) % mod);
return dp[n][k];
}