Pascal's Triangle - Java Recursion This is a fully functional implementation of a program to ask the user for a location on Pascal's Triangle, but I kind of cheated by expanding the base case to include row 0 and the 1st and last columns. I feel like this isn't a great approach, but I'm not quite sure why. (Note: I'm not a complete beginner, but I'm definitely not an experienced programmer by any definition)

import java.util.Scanner;
public class Pascal {
    public static void main(String[] args) {
        int r, c;
        Scanner sc = new Scanner(System.in);
        System.out.println("Row #");
        r = sc.nextInt();
        while (r != -1)
        {
        System.out.println("Column #:");
        c = sc.nextInt();
        System.out.println("\n" + calcPascal(r, c));
        //Just here for the while loop
        System.out.println("\nRow #");
        r = sc.nextInt();
        }
    }

    public static int calcPascal(int row, int column)
    {
        int pasVal;
        if (column == 0 || column == row || row == 0) 
        //
        {
            pasVal = 1;
        }
        else
        {
            pasVal = calcPascal(row - 1, column - 1) + calcPascal(row - 1, 
            column);
        }       
        return pasVal;
    }
}
Thanks for sharing your code.
Comments
Your code has (essentially) only one comment.
Comments should explain why the code is like it is. Your (first) comment is a good example.
Naming
Finding good names is the hardest part in programming, so always take your time to think about the names of your identifiers.
Please read (and follow) the Java Naming Conventions. The name of your base class starts with a lower case letter which should be upper case instead.
Avoid Single Character Names and Abbreviations
Since the number of characters is quite limited in most languages you will soon run out of names. This means that you either have to choose another character which is not so obviously connected to the purpose of the variable or you will have to &quot;reuse&quot; variable names for different, possibly unrelated contexts. This makes your code hard to read and understand for other people (keep in mind that you are that other person too, if you look at your code in a few months!) The same is true for abbreviations. You might find them obvious today, while you're actively dealing with the problem, but you might have to &quot;relearn&quot; them if you worked on something else for a while.
On the other hand, Java's identifier names can be virtually unlimited in length. There is no penalty in any way for long identifier names. So don't be stingy with letters when choosing names.
Define Variables as Late as Possible
You define your variables at the beginning of main. But the variable c is used only within the loop. This makes it hard to move the coin drop code to its own method. Your IDE's automated refactoring will introduce both an extra parameter and an unneeded return value. So always declare variables just before their first use unless they are magic numbers.
Magic Numbers
Your code has some magic numbers. They are literal values with a special meaning like here:
while (r != -1)
//...
    if (column == 0 || column == row || row == 0) {
        pasVal = 1;

You should introduce constants with meaningful names:
public static final int LOWEST_INDEX = 0;
public static final int TRIANGLE_START_NUMBER = 1;
public static final int INVALID_INDEX = -1;
// ...

while (r != INDEX)
//...
    if (column == LOWEST_INDEX || column == row || row == LOWEST_INDEX){
        pasVal = TRIANGLE_START_NUMBER;