giving negative number even though i did mod with 10^9 + 7.

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];
    }
Comments (2)