This is an alternative view to the answer here.
User $u_i$ hasn't watched the movie $m_j$ yet, but what is the probability that user $u_i$ will give movie $m_j$ a score that is $\ge t$ if he watches it?
Let's say the the set of movie ratings/scores is discrete and is $\mathcal{S}$. Which is common. For example, in a 5-star rating system $\mathcal{S} = \{\frac{1}{5}, \frac{2}{5}, \frac{3}{5}, \frac{4}{5}, \frac{5}{5}\}$. Also let's say that $\mathcal{U}$ is the set of users, and $\mathcal{M}$ is the set of movies.
$t$ is some threshold that we define that we think is a good cut-off point that tells us when is it worthy to recommend a movie to someone. Maybe $t = \frac{4}{5}$ is a good idea.
Let's say that $S$ is scores r.v. that takes values in $\mathcal{S}$, $U$ is users r.v. that takes values in $\mathcal{U}$, and $M$ is movies r.v. that takes values in $\mathcal{M}$.
Then we want to find this probability:
$$
P = \sum_{s \in \mathcal{S}:s \ge t}\Pr(S=s|U=u_i, M=m_j)
$$
Only if $P > 0.5$ we recommend movie $m_j$ to user $u_i$.
Let's say that we have $n$ number of movie ratings that their score is $\ge t$. Some of the ratings are by the target user $u_i$ on different movies, some more of them are on the target movie $m_j$ but by different users $u_k$ where $k \ne i$, and usually the vast majority of them are by different users on different movies.
$$
\widehat{\Pr}(S=s|U=u_i, M=m_j) = \frac{1}{n}\sum_{k\in\mathcal{U}}\sum_{l\in\mathcal{M}}\begin{cases}
\texttt{sim}^*(u_i,u_k,m_j,m_l) & \text{ if } \texttt{score}(u_k,m_l) \ge s\\
0 & \text{ if } \texttt{score}(u_k,m_l) < s\\
\end{cases}
$$
Where $\texttt{sim}^*(u_i,u_k,m_j,m_l)$ is a similarity score in $[0,1]$ that is $1$ when $u_i$ is perfectly similar to $u_k$ and $m_j$ is perfectly similar to $m_l$ (i.e. $u_i=u_k, m_j=m_l$, which never happens), and is $0$ when $u_i$ is perfectly dissimilar to $u_k$ and $m_j$ is perfectly dissimilar to $m_l$. So usually this similarity score is in between $0$ and $1$.
So what I suggest to you is to give up on only looking for users similarities, and -instead- extend it to user-movies similarities.
You need to find a trade-off between how import user and movie similarities are. For example, if a user is extremely dissimilar to $u_i$, but watches a movie that is extremely similar to movie $m_j$, it nonetheless tells you something that is more than nothing, and you better consider this something. But if both the user and the movie are dissimilar to $u_i$ and $m_j$, then you can probably ignore it.
You need to find the $\texttt{sim}^*$ function. This can be done by searching for all such similarity functions and only choose the one that that minimize some error. The error that I suggest to minimize is this:
$$
\texttt{sim}^* = \underset{\texttt{sim} \in \mathcal{H}}{\text{arg min }}\sum_{i \in \mathcal{U}}\sum_{j \in \mathcal{M}} \sum_{k \in \mathcal{U}}\sum_{l \in \mathcal{M}}|\texttt{sim}(u_i,u_k,m_j,m_l) \times \texttt{score}(u_i, m_j) - \texttt{score}(u_k, m_l)|
$$ where $\mathcal{H}$ is the space of functions.
Simply, you can assume that $\texttt{sim}^*$ is a polynomial, and then use things like gradient descend or grid search, or whatever suitable search for $\texttt{sim}^*$ and end up finding its estimation $\widehat{\texttt{sim}}^*$ (due to limitations in the assumption that $\texttt{sim}^*$ is a polynomial and limitations in the searching algorithm). As for users and movies, you can represent them as vectors as described here.
Note: Not sure about the minimization objective above. I feel it can be made simpler at least.